LeetCode之count-and-say sequence

问题描述:

/**
 * 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.
 * 
 * Note: The sequence of integers will be represented as a string.
 */

开始为1,第1个数就是1个1,即11,第2个数就是2个1,即21,第3个数是1个2,1个1,即1211.第4个数是1个1,1个2,2个1,即111221。每次后面的数都是对前面一个数的“数”和“说”。现在让你求第n个数是什么?
代码如下:

public static String countAndSay(int n) {
        StringBuilder s1=new StringBuilder("1");
        StringBuilder s2=new StringBuilder("");
        for(int i=0;i<n;i++)
        {
            int j=0;
            int len=s1.length();
            while(j<len)
            {
                int count=1;
                char c= s1.charAt(j);//获取前面数的每一位
                while(j<len-1&&s1.charAt(j)==s1.charAt(j+1))//统计相同的位数
                {
                    count++;
                    j++;
                }
                s2.append(count+"");//有几个相同的位,则在结果中追加其个数count
                s2.append(c);//再追加这个重复的数字
                if(j==len-1)
                {
                    break;
                }
                j++;
            }
            s1=s2;
            s2=new StringBuilder();
        }
        return s1.toString();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值