38-外观数列

class Solution {
public String countAndSay(int n) {
        String str,res;//res是对前一项的描述 就是结果,每个数的描述都是从“”生产的,所以要一个str记录一下上一个对前一项的描述
        res="1";
        for(int i=1;i<n;i++){//第一个一定是“1”所以说,n-1次循环就好了
            str=res;
            res="";
            for(int j=0;j<str.length();){//对上一项,也就是str进行描述
                int c=0,k=j;//c是当前数字有几个,k是当前数字的下标
                while(k<str.length()&&str.charAt(k)==str.charAt(j)){
                    k++;//后一个数等于前一个数,则被描述的数字的个数,也就是c,加一,
                    c++;
                }
                res+=Integer.toString(c)+str.charAt(j);//后一个数不等于前一个数了,跳出循环,此时有c个j,在结果res上加上c个str[j]的信息
                j=k;//更新下标
            }
        }
        return res;
    }
};

  

原文地址:https://www.cnblogs.com/lzh1043060917/p/12761429.html