Count and Say
有这样一个序列:它的第一个数是1、之后的每一个数都将它前一个数的各位数字合并,形如212211(连续的两个1、之后是连续的两个2,最后是单独的一个1)的格式。
现要求给出一个自然数n,求出在这个序列第n位的数字。
这道题用到了一个简单的循环:
public String countAndSay(int n) {
if (n <= 0)
return null; //如果所给的n小于1直接返回null
int i = 1;
String result = "1";
while (i < n) {
StringBuilder sb = new StringBuilder(); //建立一个新的StringBuilder
int count = 1; //计算同一数字重复次数
for (int j = 1; j < result.length(); j++) { //当n小于3时不会执行循环
if (result.charAt(j) == result.charAt(j - 1)) {
count++;
} else { //出现不同数字
sb.append(count); //重复了多少次
sb.append(result.charAt(j - 1)); //重复的是哪个数字
count = 1; //重置计数器
}
}
sb.append(count);
sb.append(result.charAt(result.length() - 1));
result = sb.toString(); //保存本次运算结果
i++; //循环继续
}
return result; //返回结果
}

浙公网安备 33010602011771号