算法小练——报数


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 所以需要用到递归

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

全部评论

相关推荐

神哥不得了:神哥来啦~自我评价和校园经历的话可以直接删了,从大厂暑期的话应该没有什么太多问题,应该是能拿到很多大厂面试机会的,就是在面试的时候表示的好一点就行,可以在面试前先把高频top 50的八股多巩固几遍,千万不要看那些假高频八股,这两个项目的话问题不是很大,应该能够帮你找到大厂实习的,算法的话一定要刷起来,因为大厂有些还是比较看重算法的
点赞 评论 收藏
分享
程序员小白条:简历有点拥挤,注意下排版和布局,奖项可以放项目上面,或者技术栈上面,主打一个学历+竞赛等方面,项目和技术栈这种大家包装太多了,但学历和竞赛这种实打实,虽然也有人造假,但 HR 喜欢具象化的东西
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务