Count and Say

一、 題目

題目說,如下的字符串:

1, 11, 21, 1211, 111221, ...

1讀成11(一個1)

11讀成21(兩個1)

21讀成(一個2一個1)

......

給一個整數,返回對應得語句。返回語句爲一個字符串

二、 分析

題目的意思不是很明白,其實就是說第i+1個字符串是第i個字符串的讀法,第一字符串爲 “1

比如第四個字符串是1211,它的讀法是 1112,21,因此第五個字符串是111221。第五個字符串的讀法是:312211,因此第六個字符串是312211

明白了題意,我們不難想到思路:

1、初始字符串爲”1”,字符ch爲 str[0],中間字符串爲str2;

2、從1開始循環產生字符串直到n

3、遍歷字符串,計數相連的相同字符,併產生新的字符串; 

 

class Solution {
public:
    string countAndSay(int n) {
        if(n == 0)
        	return "";
        string str = "1";
        for(int i = 1; i < n; i++){
        	char ch = str[0];
        	string str2 = "";
        	int count = 1;
        	for(int j=1;j<str.size();j++){
        		if (str[j] == ch)
        			count ++;
        		else if(count > 0){
        			str2 = str2 + char(count + '0') + ch;
        			count = 1;
        			ch = str[j];
				}
			}
        	str2 = str2 + char(count + '0') + ch;
        	str = str2;
        }
        return str;
    }
};

發佈了164 篇原創文章 · 獲贊 18 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章