38. Count and Say
一、题目
1、审题
2、分析
①当 n = 1, 输出 1,
② n = 2, ①读作 1个1,输出 11
③ n = 3, ②读作2个1,输出 21
④ n = 4, ③读作1个2,1个1,输出 1211
⑤ n = 5, ④读作1个1,1个2,2个1,输出 111221
...
二、解答
1、思路:
①当 n = 1,时,返回 字符串 1;
②当 n > 1 时,调用循环计算出每一次上一步所返回的字符串,记作 sumStr;
③ 将sumStr依次截取最后一个字符,并记录连续相同字符的个数,最终逆序拼接起来即为所要求的字符串。
class Solution { public String countAndSay(int n) { if(n ==1) return "1"; String numString = "1"; for(int i = 2; i <= n; i++) { numString = readNum(numString); } return numString; } public String readNum(String numString) { StringBuffer sb = new StringBuffer(""); ArrayList<Integer> list = new ArrayList<Integer>(); int count = 0; while(!numString.equals("")) { int len = numString.length(); int tmp = numString.charAt(len - 1) - '0'; numString = numString.substring(0,len - 1); list.add(tmp); } while(!list.isEmpty()) { int target = list.remove(0); int target_num = 1; while(!list.isEmpty() && list.get(0) == target) { target_num++; list.remove(0); } sb.insert(0, target_num*10 + target);; } return sb.toString(); } }