Leetcode_38_Count and Say
阿新 • • 發佈:2018-12-22
思路較簡單,暴力遍歷即可
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”矛盾)