LeetCode 38 外观数列

    科技2024-03-18  90

    题目描述: 题意理解: 题目中有前五项的序列。仔细理解题意,序列中的每一项都是对前一项的描述是指第二项11是说第一项 1是一个1,第三项 21 是说第二项 11 是2个1,第四项 1211 是说第三项 21 是一个2,一个1,第五项 111221 是说第四项 1211 是一个1,一个2,2个1。从我理解来说,统计前一项相同字符的个数,直到遇到不相同的字符,记录统计出来的个数count和相应字符,再接着统计,直到前一项比较完,注意:分界线是不相同的字符,可以这么说每次统计的终结点是遇到不相同字符,而不是统计整个前一项相同字符的个数。

    代码(Java实现):

    class Solution { public String countAndSay(int n) { if(n == 1){//递归的边界限制 return "1"; } StringBuilder sb = new StringBuilder(); String str = countAndSay(n-1);//每一次输出都是下一次的输入 int i = 0; while(i<str.length()){ int count = 1;//遇到一个字符,所以初始值是1,而不是0 while(i < str.length() - 1 && str.charAt(i) == str.charAt(i+1)){//统计相同字符的个数 count++; i++; } sb.append(count).append(str.charAt(i));//将统计结果count和相应字符,添加到sb中 i++; } return sb.toString(); } }

    结果:

    Processed: 0.011, SQL: 8