首页 > 代码库 > ZigZag Conversion

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   NA P L S I I GY   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".
这道题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             }//for29             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 }

 

ZigZag Conversion