原文地址:
LeetCode–字符串(38. 外观数列).
持续更新代码仓库地址:
https://github.com/miniWiseNut/algorithm-training.git.
解:
前一个数字,用描述性语言说出来就是下一个数字:
比如: 2333
描述就是 1 个 2, 3个3,记做1233,以此类推。
所以上面的题目第6个数是:
111221,描述为 3 个 1,2 个 2,1 个 1,记做 312211
代码:
public class P38外观数列 {
public static String countAndSay(int n) {
if (n == 0) {
return "";
}
String num = "1";
for (int i = 1; i < n; i++) {
num = say(num);
}
return num;
}
private static String say(String num) {
StringBuffer sb = new StringBuffer();
int start = 0;
for (int i = 0; i < num.length() + 1; i++) {
// 最后一位直接拼接
if (i == num.length()) {
sb.append(i - start).append(num.charAt(start));
// 直到start位的字符串和i位的字符串不同,拼接并更新start位
} else if (num.charAt(i) != num.charAt(start) ) {
sb.append(i - start).append(num.charAt(start));
start = i;
}
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(countAndSay(7));
}
}