leetcodeNo.38 报数

//思路就是 从字符串开头一直读取几个几,如21 就是一个2一个1就是1211,2231就是两个2一个3一个1,就是221311
//时间复杂度23.89%,空间6.87%
class Solution {
    public String countAndSay(int n) {
        String previousStr="1";
        String currentStr="1";
        int i=0,j=0;//双指针
        int k=1;
        while(k<n){
            currentStr="";
            while(j<previousStr.length()){
                while(j<previousStr.length()&&previousStr.charAt(i)==previousStr.charAt(j)){
                    ++j;
                }                
                currentStr=currentStr+String.valueOf(j-i)+previousStr.charAt(i); 
                if(j==previousStr.length()-1&&previousStr.charAt(j)!=previousStr.charAt(j-1))
                     currentStr=currentStr+"1"+previousStr.charAt(j); //if处理下面那个注释的问题
                i=j;
                ++j;  //这一步可能会范围溢出 有时候会导致最后一个单独的数字没有读到(比如22331,这个1读不到)
            }
            previousStr=currentStr;
            i=0;   //一个数字报数完成,指针初始化 然后进入下一个报数
            j=0;
            ++k;  
        }
        return currentStr;
    }
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值