ZigZag Conversion [Z 型字母转换]
2014-12-25 15:48
316 查看
he string
of rows like this: (you may want to display this pattern in a fixed font for better legibility)
And then read line by line:
Write the code that will take a string and make this conversion given a number of rows:
return
如下图
下面是高效方法Runtime: 572 ms
"PAYPALISHIRING"is written in a zigzag pattern on a given number
of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N A P L S I I G Y I R
And then read line by line:
"PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3)should
return
"PAHNAPLSIIGYIR".
如下图
public class Solution { public String convert(String s, int nRows) { if(nRows>=2){ //计算字符总长度 int len=s.length(),index=0,i,j; int nColumns=len; //通过计算可以获得nRow和间隔之间的宽度gap,gapCount用于当前位与间隔的位置 int gap=nRows-2,gapCount=0; char[] arr=s.toCharArray(); //数组缺省值为整型0 char [][] arrTable=new char[nRows][nColumns]; for(j=0;j<nColumns && index<len;j++){ for(i=0; i<nRows&&index<len; i++){ if(j==0 || gapCount==0){ arrTable[i][j]=arr[index]; index++; }else{ //处于间隔中 //注意下标从0开始 if(i==(nRows-1)-gapCount){ arrTable[i][j]=arr[index]; index++; } } } if(gapCount==gap){ gapCount=0; }else{ gapCount++; } } char [] responeArr=new char[len]; index=0; for(i=0;i<nRows&&index<len;i++){ for(j=0;j<nColumns&&index<len;j++){ if(arrTable[i][j]!=0){ responeArr[index]=arrTable[i][j]; index++; } } } return String.valueOf(responeArr); }else{ return s; } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Solution s=new Solution(); String newS=s.convert("PAYPALISHIRING", 3); System.out.print(newS.toString()); } }
下面是高效方法Runtime: 572 ms
public class Solution { public String convert(String s, int nRows) { if(nRows>=2){ //计算字符总长度 int len=s.length(),index=0,i,j; //通过计算可以获得nRow和间隔之间的宽度gap,gapCount用于当前位与间隔的位置 int gap=nRows-2,gapRemain=0; char[] arr=s.toCharArray(); //数组缺省值为整型0 char [] responeArr=new char[len]; //横向扫描,按照字符串最终位置获取数据 //第一行与最后一行相同 for(i=0;i<len;i+=(nRows-1)*2){ responeArr[index++]=arr[i]; } //中间部分 gapRemain=gap; for(i=1;i<nRows-1;i++){ for(j=i;j<len;j+=2*(gap+1)){ responeArr[index++]=arr[j]; if(j+2*gapRemain<len){ responeArr[index++]=arr[j+2*gapRemain]; } } gapRemain--; } //最后一行 for(i=nRows-1;i<len;i+=(nRows-1)*2){ responeArr[index++]=arr[i]; } return String.valueOf(responeArr); }else{ return s; } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Solution s=new Solution(); String newS=s.convert("PAYPALISHIRING", 2); System.out.print(newS.toString()); } }
相关文章推荐
- leetcode:ZigZag Conversion 曲线转换
- 6:ZigZag Conversion(锯齿形的转换)
- LeetCode 6 ZigZag Conversion(Z型转换)
- [Leetcode #6]ZigZag Conversion 将字符串转换成ZigZag形式
- [Leetcode #6]ZigZag Conversion 将字符串转换成ZigZag形式
- [C++]ZigZag Conversion 之字形转换
- LeetCode | ZigZag Conversion(锯齿形转换)
- 【LeetCode-面试算法经典-Java实现】【006-ZigZag Conversion(Z字型转换)】
- Leet Code 6 ZigZag Conversion - 字符串之字形转换 - Java
- LeetCode OJ:ZigZag Conversion(字符串的Z字型转换)
- 使用js实现大小写字母转换功能
- 6. ZigZag Conversion
- 输入一个字母,实现大小写字母的转换
- C++中字母大写和小写转换实现的优化
- 编写一个程序从标准输入读取字符,并把他们写到标准输出,除了大写字母转换成小写字母之外,其他的原样输出。
- 宏汇编实现字母大小写的转换
- 数字字符串转换为字母组合的种数
- leetcode:ZigZag Conversion
- 6. ZigZag Conversion
- JAVA中数字与字母的转换(简单总结)