算法小练——报数


title: 算法小练——报数
categories:

  • Algorithms
    tags:
  • esay
    abbrlink: 867483378
    date: 2019-11-08 14:19:52

报数

描述

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

1.     1
2.     11
3.     21
4.     1211
5.     111221
1 被读作  "one 1"  ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211。

给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。

注意:整数顺序将表示为一个字符串。

示例

示例 1:

输入: 1
输出: “1”

示例 2:

输入: 4
输出: “1211”

代码

class Solution {
    public String countAndSay(int n) {
        String ans = "1";
        if(n==1){
            return ans;
        }else {
            int time = 0;
            StringBuilder stringBuilder = new StringBuilder();
            String a  =countAndSay(n-1);
            char[] chars = a.toCharArray();
            for (int i = 0; i < chars.length; i++) {
                time++;
               if(i+1==chars.length){
                    stringBuilder.append(time);
                    stringBuilder.append(chars[i]);
                    break;
                }
                if(chars[i]!=chars[i+1]){
                    stringBuilder.append(time);
                    stringBuilder.append(chars[i]);
                    time =0;
                }
            }
            return stringBuilder.toString();
        }
    }
}

代码效果

执行结果:

通过

显示详情

执行用时 :1 ms, 在所有 java 提交中击败了99.10%的用户

内存消耗 :34 MB, 在所有 java 提交中击败了93.49%的用户

笔记

这道题的难点有两个

  • 一个是审题读题,很多人拿到这道题会一脸懵,对题的理解需要认真的读题
  • 要求第n个数,则需要求第n-1个,因为已知的其实是 1.1 所以需要用到递归

值得高兴的是,这是自己第一次顺利得写出了递归。

全部评论

相关推荐

我是小红是我:学校换成中南
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务