题目
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"
.
思路
使用numRows这么多个String的String数组来分别容纳“Z”字形折动时的每一个char,然后用一个direction来表示方向,每当数组的下标将要越界时候就改变方向,最后顺序将数组中的String类粘贴起来即可得到答案。
代码
public class Solution {
public String convert(String s, int numRows) {
if(numRows == 1) return s;
int diction = 0;//0表示向下,1表示向上
String []str = new String[numRows];
for(int i = 0 ; i < numRows ; ++ i){
str[i] = "";
}
int k = 0;//模数
for(int i = 0 ; i < s.length() ; ++ i){
char temp = s.charAt(i);
str[k] += temp;
if(diction == 0) ++k;
else --k;
if(k == numRows - 1 || k == 0) diction = (diction + 1) % 2;
}
String result = "";
for(int j = 0 ; j < numRows ; ++ j){
result += str[j];
}
return result;
}
}