038 Count and Say 数数并说

数数并说序列是一个整数序列,第二项起每一项的值为对前一项的计数,其前五项如下:
1.     1
2.     11
3.     21
4.     1211
5.     111221
1 被读作 "一个一" 即 11。
11 被读作  "两个一" 即 21。
21 被读作  "一个二 和 一个一" 即 1211。
给一个正整数 n ,输出数数并说序列的第 n 项。
注意:该整数序列的每项都输出为字符串。
例 1:
输入: 1
输出: "1"
例 2:
输入: 4
输出: "1211"
详见:https://leetcode.com/problems/count-and-say/description/

实现语言:Java

class Solution {
    public String countAndSay(int n) {
        if(n<=0){
            return null;
        }
        String s="1";
        for(int i=1;i<n;++i){
            StringBuilder tmp=new StringBuilder();
            int cnt=1;
            for(int j=1;j<s.length();++j){
                if(s.charAt(j)==s.charAt(j-1)){
                    ++cnt;
                }else{
                    tmp.append(cnt);
                    tmp.append(s.charAt(j-1));
                    cnt=1;
                }
            }
            tmp.append(cnt);
            tmp.append(s.charAt(s.length()-1));
            s=tmp.toString();
        }
        return s;
    }
}

 实现语言:C++

class Solution {
public:
    string countAndSay(int n) {
        if(n<=0)
        {
            return nullptr;
        }
        string s="1";
        for(int i=1;i<n;++i)
        {
            string tmp="";
            int cnt=1;
            for(int j=1;j<s.size();++j)
            {
                if(s[j]==s[j-1])
                {
                    ++cnt;
                }
                else
                {
                    tmp=tmp+char(cnt+'0')+s[j-1];
                    cnt=1;
                }
            }
            s=tmp+char(cnt+'0')+s[s.size()-1];
        }
        return s;
    }
};

 

posted on 2018-04-01 22:25  lina2014  阅读(587)  评论(0编辑  收藏  举报

导航