ZigZag Conversion
ZigZag Conversion
The string "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 RAnd 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"
.这道题A的略烦
逻辑上,一行一行的遍历改写后的字符串,计算出每一行每一个字符在str中的位置
1 public class Solution { 2 public String convert(String s, int nRows) { 3 int length_part = 2 * nRows - 2;//一个zigzag组成部分的长度 4 int length_lastpart;//最后一个组成部分的长度 5 int num_part;//组成部分的个数 6 int length_s = s.length();//s长度 7 int length_in_part = length_part; 8 if(0 == s.length() || 1 == s.length() || 1 == nRows) 9 return s; 10 11 String result = ""; 12 num_part = length_s / length_part; 13 length_lastpart = length_s % length_part;//求出组成部分个数和最后一部分的长度 14 15 //int interval = 2 * nRows - 2;//最大间隔 16 17 for(int i = 1; i <= nRows; i++){//遍历zigzag逻辑上的每一行的字符,这里只是计算出在s中的位置 18 int index = i - 1;//每一行第一个字符的位置,输出每行的一个字符后后移 19 for(int j = 1; j <= num_part; j++){//输出每一行的内容 20 result += s.charAt(index); 21 22 if(1 != i && nRows != i){ 23 //index += length_in_part; 24 result += s.charAt(index + length_in_part); 25 } 26 27 index += length_part; 28 }//for 29 if(i <= length_lastpart){//最后一部分还有内容 30 result += s.charAt(index); 31 if(index + length_in_part < s.length() && length_in_part != 0) 32 result += s.charAt(index + length_in_part); 33 } 34 length_in_part -= 2; 35 } 36 37 return result; 38 } 39 }
Please call me JiangYouDang!