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”.
题目解析:输入为字符串Z字形存储格式,输出为正常从左到右的格式
代码解析:定义一个长度为nRows一维数组String[] ans[nRows]用来存储每一行的字符串(最好不要用二维数组存储,一开始不容易计算列数,更加损耗时间和空间)当索引row<=0时次加1,当row>nRows时,i依次减1,ans[row] = ans[row]+s.charAt(i)[i是遍历s的索引]
public class Solution2 {
public static void main(String[] args) {
System.out.println(convert("PAYPALISHIRING", 3));
}
public static String convert(String s, int numRows) {
String[] ans = new String[numRows];
Arrays.fill(ans, "");
int len = s.length();
int row = 0;
int x = 1;
if(len<= numRows){
return s;
}
for(int i = 0;i<=len-1;i++){
ans[row] += s.charAt(i);
row += x;
if(row>=numRows){
row = row-2;
x = -1;
}
if(row == 0){
x = 1;
}
}
String ret = "";
for(int i = 0;i<=numRows-1;i++){
ret += ans[i];
}
return ret;
}
}