public class Day17 { //将一个给定字符串根据给定的行数,以从上往下、从左到右进行 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 // Related Topics 字符串
//leetcode submit region begin(Prohibit modification and deletion)
public String convert(String s, int numRows) { char[] c = new char[s.length()]; int size = numRows * 2 - 2; //绝对步长 int index; //记算s下标 int count = 0; //记录c下标 int add; //相对步长 if (numRows < 2) { return s; } for (int i = 0; i < numRows; i++) { //一层一层遍历 index = i; add = i * 2; while (index < c.length) { //超出字符串长度计算下一层 c[count] = s.charAt(index); add = size - add; index += add == 0 ? size : add; count++; } } return new String(c);
}
public static void main(String[] args) { String s = "LEETCODEISHIRING"; Day17 day17 = new Day17(); day17.convert(s,4); } } //leetcode submit region end(Prohibit modification and deletion)