规律不多说,可以去LeetCode看评论。
其实我很早就想到了解法,但是用 JAVA 我比较陌生,一直用代码实现不了解法。
几个月没做题,脑子比较迟钝,这个题目做了大概 3 小时 。
思路:
模拟规律,用循环做。
1.初始化 str = “1”;
2.一个循环,循环的层数即是 n 。
3.用一个 pre 记录 str 的第一个值。用一个 count = 1,代表目前只有一个重复的 pre 。设置一个stringBulider 类,为 ans。
4.再用一个循环,循环的层数代表的 str 的长度 - 1 (下标从 1 开始, 因为我们设置了 一个 pre,这个 pre 就是 str 的第 0 个元素)。 在这个循环里面去设置一个 c ,c 与pre 相等的时候,count ++ 。 如果不相等,用 ans.append(count).append(pre)。 然后 pre = c, count = 1;
5.让str = ans.toString 。 继续做循环
6.第一个循环结束,返回str,即是答案。
和 JAVA 有关的知识点:
1. stringBulider 类, append 方法。
2.String 类,charAt 方法。 toString 方法。
通过代码:
class Solution { public String countAndSay(int n) { String str = "1"; for(int i = 0; i < n-1; i++) { int count = 1; StringBuilder ans = new StringBuilder(); char pre = str.charAt(0); for(int j = 1; j < str.length(); j++){ char c = str.charAt(j); if(c == pre){ count++; }else{ ans.append(count).append(pre); pre = c; count = 1; } } ans.append(count).append(pre); str = ans.toString(); } return str; } }