思路:将第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; } }