package day07;
//外观数列,给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。
public class CountAndSay {
public static void main(String[] args) {
//测试
int n = 5;
String res = countAndSay(n);
System.out.println(res);
}
//输出外观数列的第 n 项。1 <= n <= 30
public static String countAndSay(int n) {
if (n < 1 || n > 30) {
return new String("");
}
if (n == 1) {
return new String("1");
}
String res = "1";
//从2开始,通过前一项得到后一项
for(int i = 2; i <= n; i ++) {
res = getCurByPre(res);
}
return res;
}
//根据前一个外观数列得到后一个外观数列
public static String getCurByPre(String pre) {
StringBuilder stringBuilder = new StringBuilder();
int count = 1;
for(int i = 0; i < pre.length(); i ++) {
//得到每一个数字有几个连续的
while (i + 1 < pre.length() && pre.charAt(i) == pre.charAt(i + 1)) {
count ++;
i ++;
}
//几个几
stringBuilder.append(count);
stringBuilder.append(pre.charAt(i));
count = 1;
}
return stringBuilder.toString();
}
}
外观数列的思路及JAVA代码实现
最新推荐文章于 2023-01-28 16:04:39 发布