外觀數列從 "1" 開始,每一項描述前一項:1 → 11 → 21 → 1211 → 111221...。給定 n,生成第 n 項字符串。
迭代構建:對當前字符串掃描,統計連續相同字符個數,輸出 個數+字符 形成下一項:
public String countAndSay(int n) {
String str = "1";
for (int i = 1; i < n; i++) {
int count = 1;
StringBuilder sb = new StringBuilder();
for (int j = 1; j < str.length(); j++) {
if (str.charAt(j) == str.charAt(j-1)) count++;
else { sb.append(count).append(str.charAt(j-1)); count = 1; }
}
sb.append(count).append(str.charAt(str.length()-1));
str = sb.toString();
}
return str;
}
O(len) 時間n=5 過程:
"1" → "11" → "21" → "1211" → "111221"
本題考察字符串處理與模擬能力,代碼簡潔高效。