LeetCode--006--Z字型变换(java)
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "LEETCODEISHIRING"
行数为 3 时,排列如下:
L C I R E T O E S I I G E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"
。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = "LEETCODEISHIRING", numRows = 3 输出: "LCIRETOESIIGEDHN"
示例 2:输入: s = "LEETCODEISHIRING", numRows = 4 输出: "LDREOEIIECIHNTSG" 解释:
L D R E O E I I E C I H N T 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 <s.length();i++){ 9 int index = i %(2 * numRows - 2); 10 index = index < 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