Leecode38 count-and-say

题目描述

count-and-say数列的前几项如下:

1, 11, 21, 1211, 111221, ...
1读作“1个1”或11
11读作“2个1“或者21
21读作”1个2,1个1“或者1211
给出一个整数n,请给出序列的第n项
注意:序列中的数字用字符串表示

分析

  • 从上一个数字,到下一个数字,建立一种计算关系。
  • 从1开始计算,计算 n-1 次,得到第n个数字。
  • 使用 pre 记录上一位数字,使用 count 计算上一位数字出现次数。
  • 遇到不同于pre的位,将 count + pre 记录Stringbuffer上。
  • 遍历完之后,产生下一位的字符串。

java 代码

public class Solution {
    public String countAndSay(int n) {
        if(n <= 0){
            return "";
        }        
        String  str = "1";        
        for(int i = 1; i < n; i++){
            
            int count = 0;
            char pre = '*';
             StringBuffer sb = new StringBuffer(); 
            for(int j = 0; j < str.length(); j++){
                if(str.charAt(j) == pre || pre == '*'){
                    count ++;
                }else{
                    sb.append(count+Character.toString(pre));
                    count = 1;
                }
               pre =  str.charAt(j);
            }
            sb.append(count+Character.toString(pre));
            str = sb.toString();
        }
        return str;
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 38 Count and Say 报数 Description:The count-and-say sequenc...
    air_melt阅读 2,972评论 1 1
  • 前言 算法这个活动很严,每天必须打卡,而且不限制语言,群内已有PHP、Python、Java、Javascript...
    鸡汤小弟阅读 2,860评论 5 4
  • 报数 题目描述: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下: 1 被读作 ...
    Peter_Haoran阅读 1,215评论 0 0
  • 8月22日-----字符串相关 2-3 个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消...
    future_d180阅读 4,533评论 0 1
  • 标签: C++ 算法 LeetCode 字符串 递归 每日算法——leetcode系列 问题 Count and...
    CarlBlack阅读 3,342评论 0 0