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; //返回结果 }