力扣 38. 外观数列

第一反应当然是遍历生成结果

所以先试着把题目解出来,很久没有打代码了,记录一下一些关于StringBuilder的简单用法。

  1. s.apend(); 添加字符
  2. s.delete(0,s.length()); 清空字符串
  3. s.charAt(index); 查询下标为index的字符

遍历出结果后是8ms,思考了一会儿也没有什么更好的想法,只是改了一些字符串的操作,减少到了6ms
最后看答案,发现也没有什么巧妙地办法。
总结一下,递归有时会更加省时一点(虽然不知道为什么会快一点)以后知道了再来补充吧

自己的(6ms)

class Solution {
    public String countAndSay(int n) {
        StringBuilder ans = new StringBuilder("1");
        for(int i = 1; i < n; i++){
            StringBuilder s = new StringBuilder(ans);
            int l = s.length();
            ans = new StringBuilder();
            char c = s.charAt(0);
            int index = 0;
            while(true){
                char cont = '0';
                for(;index < l && s.charAt(index) == c; index ++){
                    cont ++;
                }
                ans.append(cont);
                ans.append(c);
                if(index == l)
                    break;
                c = s.charAt(index);
            }
        }
        return ans.toString();
    }
}

答案地(1ms)

`class Solution {
    public String countAndSay(int n) {
        // 递归出口
        if(n==1){
            return "1";
        }
        // 假设我们获得上一次的结果为 s1 = 112213
        String s1 = countAndSay(n - 1);
        // 定义结果
        StringBuilder result = new StringBuilder();
        // 对s1遍历处理获取值
        char local = s1.charAt(0);
        int count = 0;
        for (int i = 0; i < s1.length(); i++) {
            // 设定计数器 计算同一个数字出现的次数 count
            if(s1.charAt(i) == local){
                count++;
            }else {
                // 不符合,记录下
                result.append(count);
                result.append(local);
                count = 1;
                local = s1.charAt(i);
            }
        }
        result.append(count);
        result.append(local);
        return result.toString();
    }
}`

第一次写,就这样了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eyvr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值