将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "LEETCODEISHIRING"
行数为 3 时,排列如下:
L C I RE T O E S I I GE D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"
。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = "LEETCODEISHIRING", numRows = 3输出: "LCIRETOESIIGEDHN"
示例 2:输入: s = "LEETCODEISHIRING", numRows = 4 输出: "LDREOEIIECIHNTSG" 解释:
L D RE O E I IE C I H NT S G 分析: 竖着看,看每个字符属于第几行,每一行为一个string,最后把每一行都连接起来。行索引index和总行数的关系为index = i %(2 * rowNums - 2), 当index小于总行数,index不变,否则index = 2 * rowNums - 2 - index,比如第二列的c,index = 2 * 4 - 2 - 4 = 2;
1 class Solution { 2 public String convert(String s, int numRows) { 3 if(numRows<=1)return s; 4 StringBuilder[] sb = new StringBuilder[numRows]; 5 for(int i = 0;i < sb.length;i++){ 6 sb[i] = new StringBuilder(""); 7 } 8 for(int i = 0;i< numRows ? index : 2*numRows - 2 - index;11 sb[index].append(s.charAt(i));12 }13 for(int i = 1;i < sb.length;i++){14 sb[0].append(sb[i]);15 }16 return sb[0].toString();17 }18 }
2019-03-13 22:52:42