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   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             }//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 }
原文地址:https://www.cnblogs.com/luckygxf/p/4100837.html