1. 程式人生 > >Leetcode_38_Count and Say

Leetcode_38_Count and Say

思路較簡單,暴力遍歷即可

class Solution {
public:
    string countAndSay(int n) {
        if(n==1)
			return "1";
		string ans,record="1";
		for(int i=1;i<n;i++)
		{
			int len=record.size();
			int cnt=0,num=-1;
			ans="";
			for(int j=0;j<len;j++)
			{
				if(record[j]!=char(num+'0'))
				{
					if(cnt>0)
						ans=ans+char('0'+cnt)+char('0'+num);
					cnt=1;
					num=record[j]-'0';
				}
				else
					cnt++;
			}
			record=ans+char('0'+cnt)+char('0'+num);
		}
		return record;
    }
};

考慮的過程中,擔心會發生超過9個同一數字連續出現的情況,這樣就不能以char的型別將cnt加入ans或record了。後來仔細一想,這是不可能的(可以假設n取某個值x時出現這種情況,那麼在取值為x-1時,該數字連續出現的個數將更多,繼續回溯,結論將與當n=1時返回值為“1”矛盾)