题目大意:
第一个数是1,第二个数值11(1个1),第三个数值21(2个1),给定第几个数,输出相应的字符串。
思路:
起初的想法是递归,写着发现,就这么一直写就行,挺简单的。
public class Solution { public String countAndSay(int n) { if(n == 1) return "1"; String res = "",s = "1"; int i = 1; while(i++ < n) { int count = 1; int j = 0; while(j < s.length()) { while(j+1 < s.length() && s.charAt(j) == s.charAt(j+1)) { count++; j++; } res += Integer.toString(count) + s.charAt(j); count = 1; j++; } s = res; res = ""; } return s; } }
递归解法:
public class Solution { public String countAndSay(int n) { if(n == 1) return "1"; String str = countAndSay(n-1); char [] c = str.toCharArray(); String tmp = ""; int count = 1; for(int i = 0; i < c.length; i++) { if(i+1 < c.length && c[i] == c[i+1]) count++; else { tmp = tmp + Integer.toString(count) + c[i]; count = 1; } } return tmp; } }