- 题目:将字符串中的字符按照z字形走向排列,然后按行读取排列后的元素,返回字符串
- 难度:Medium
思路:将第i行的元素组成一个字符串,然后将所有行组成新的字符串;
重点是如何知道元素字符中的第i个元素属于第几行
定义一个int类型的变量row,代表当前元素属于第几行;然后定义一个flag标志位,标志下一个元素是往上读还是往下读的。将相同的元素放入同一个字符中(定义一个大小为numRows的字符串数组)
- 代码:
public class Solution {
public String convert(String s, int numRows) {
if(s == null || s.length() == 0 || s.length() == 1 || numRows == 1 || s.length() <= numRows){
return s;
}
String res[] = new String[numRows];//存zigzag变换后的每一行元素
//判断原始字符串的第i个元素所在的行
int row = 0;
int flag = 1;//标志是在往上还是往下读
for(int i = 0; i < s.length();i++){
String result = "" + s.charAt(i);
if(res[row] == null){
res[row] = "";
}
res[row] += result;//把第i个元素加到相应的行里
//接下来是往下读原始字符串
if(row == 0){
flag = 1;
}
if(row == numRows-1){
flag = -1;
}
row += flag;
}
String result = "";
for(int i = 0; i < numRows; i++){
result += res[i];
}
return result;
}
}