开发者社区> D_H_T> 正文

算法题-Count and Say

简介: 题目来自 LeetCode The count-and-say sequence is the sequence of integers with the first five terms as following: 1 11 21 1211 111221 1 is read off as “one 1” or 11.
+关注继续查看

题目来自 LeetCode

The count-and-say sequence is the sequence of integers with the first five terms as following:

  1. 1
  2. 11
  3. 21
  4. 1211
  5. 111221

1 is read off as “one 1” or 11.
11 is read off as “two 1s” or 21.
21 is read off as “one 2, then one 1” or 1211.
Given an integer n, generate the nth term of the count-and-say sequence.

Note: Each term of the sequence of integers will be represented as a string.

Example 1:

Input: 1
Output: “1”
Example 2:

Input: 4
Output: “1211”


如果没有看懂题意的话,我简单解释一下:
题目规定:
第一个字符串是 “1”
第二个字符串是 “11”(数前一个字符串中的数字个数,前一个有:一个“1”)
第三个字符串是 “21”(前一个字符串有:两个“1”)
第四个字符串是 “1211”(前一个字符串有:一个“2”和一个“1”)

按照这个规律,输入 n,输出对应的第 n 个字符串

这道题是一道简单的递归题,我是用 Java 写的,如果你也使用 Java 那么我建议你使用 StringBuilder 做字符串的拼接,这样可以很好的提高性能

如果你对 String 和 StringBuilder 不够了解,请戳这里: String,StringBuffer,StringBuilder

以下是答案源码:

class Solution {
    public String countAndSay(int n) {
       if (n == 1){
            return "1";
        }
        String str = countAndSay(n - 1);
        StringBuilder result = new StringBuilder();
        int count = 0;
        int numberIndex = 0;
        int i = 0;
        while (i < str.length()){
            if (str.charAt(numberIndex) == str.charAt(i)){
                count++;
                if (i + 1 == str.length()){
                    result.append(String.valueOf(count)).append(String.valueOf(str.charAt(numberIndex)));
                }
            }else {
                result.append(String.valueOf(count)).append(String.valueOf(str.charAt(numberIndex)));
                numberIndex = i;
                count = 0;
                continue;
            }
            i++;
        }
        return result.toString(); 
    }
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ML之NB:利用NB朴素贝叶斯算法(CountVectorizer/TfidfVectorizer+去除停用词)进行分类预测、评估
ML之NB:利用NB朴素贝叶斯算法(CountVectorizer/TfidfVectorizer+去除停用词)进行分类预测、评估
52 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
20690 0
C++ STL算法系列1---count函数
一.count函数 algorithm头文件定义了一个count的函数,其功能类似于find。这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果。 编写程序读取一系列int型数据,并将它们存储到vector对象中,然后统计某个指定的值出现了多少次。
621 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18989 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
25226 0
闰年的算法
关于平年、闰年的算法,大家比较耳熟的可能就是“四年一闰”的说法,但实际上这个说法是不准确的。看看天文学上关于平年闰年的规定就很清楚了: 天文学上,把地球绕太阳一周称为一年。但实际上,地球绕太阳转一圈需要365天5时48分46秒,也就是365.2422天,为了方便,一年定为365天,叫做平年;这样每过四年差不多就要多出一天来,把这一天加在2月里,这一年就有366天,叫做闰年。
1216 0
ML之NB:利用朴素贝叶斯NB算法(CountVectorizer+不去除停用词)对fetch_20newsgroups数据集(20类新闻文本)进行分类预测、评估
ML之NB:利用朴素贝叶斯NB算法(CountVectorizer+不去除停用词)对fetch_20newsgroups数据集(20类新闻文本)进行分类预测、评估
74 0
+关注
D_H_T
java,编程语言相关技术专家
42
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载