前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode之-题38

Leetcode之-题38

作者头像
GavinZhou
发布2018-01-02 16:11:28
4870
发布2018-01-02 16:11:28
举报

题目

Count and Say

The count-and-say sequence is the sequence of integers beginning as follows: 1, 11, 21, 1211, 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 sequence.

题解

Java实现 类似于斐波拉契数列的生成,由前一个生成后一个,我的解法也是这个,下面附上AC代码

代码语言:javascript
复制
public String countAndSay(int n) {
        if(n == 0 || n == 1){
            return "1";
        }
        String res = "11"; //第一个答案
        for(int i = 2; i < n; ++i){
            res = getNextSay(res);
        }
        return res;

    }

    /**
    * 根据上一个答案获得下一个需要输出的Say
    */
    private String getNextSay(String res) {
        StringBuilder sb = new StringBuilder(); //返回答案
        int num = 1; //倍数
        char formerChar = res.charAt(0);
        for(int i = 1; i < res.length(); ++i){
            if(res.charAt(i) == formerChar){
                //下一个字符与上一个相同
                //倍数加一
                num++;
                continue;
            }else{
                //下一个字符与上一个字符不同
                //输出倍数个formerChar
                sb.append(Integer.toString(num) + formerChar);
                //更新
                formerChar = res.charAt(i);
                num = 1;
            }

        }
        sb.append(Integer.toString(num) + formerChar);
        return sb.toString();
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-07-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 题解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档