題目描述:將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下军浆、從左到右進(jìn)行 Z 字形排列棕洋。
e.g:
輸入: s = "LEETCODEISHIRING", numRows = 3 輸出: "LCIRETOESIIGEDHN"
輸入: s = "LEETCODEISHIRING", numRows = 4 輸出: "LDREOEIIECIHNTSG"
思路:
java代碼
/**
* 題目4: 將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下乒融、從左到右進(jìn)行 Z 字形排列掰盘。
* e.g: 1. 輸入: s = "LEETCODEISHIRING", numRows = 3 輸出: "LCIRETOESIIGEDHN"
* 2. 輸入: s = "LEETCODEISHIRING", numRows = 4 輸出: "LDREOEIIECIHNTSG"
* @param s
* @return
*/
private static String solution05(String s, int numRows) {
if (1 == numRows) {
return s;
}
char[] input = s.toCharArray();
int length = input.length;
StringBuilder result = new StringBuilder();
for (int i = 0; i < numRows && i < length; i++) {
// 第一列
result.append(input[i]);
for (int j = i + 2 * (numRows - 1); j < length || (j - 2 * i) < length; j = j + 2 * (numRows - 1)) {
// 非首行和末行
if (0 != i && (numRows - 1) != i) {
result.append(input[j - 2 * i]);
}
if (j < length) {
result.append(input[j]);
}
}
}
return result.toString();
}
算法時(shí)間復(fù)雜度:結(jié)果長(zhǎng)度為n,共會(huì)有n次append操作赞季,所以復(fù)雜度為O(n)愧捕。