class Solution: def countAndSay(self, n: int) -> str: r={} r[1]='1' r[2]='11' r[3]='21' r[4]='1211' r[5]='111221' if n in r: return r[n] else: i=6 while i<=n: j=0 k=1 c=1 s='' while j<len(r[i-1])-1: if r[i-1][j]==r[i-1][k]: c+=1 j,k=j+1,k+1 else: s+=str(c)+r[i-1][j] j,k=j+1,k+1 c=1 print(j,k) if j ==len(r[i-1])-1: s+=str(c)+r[i-1][j] r[i]=s i+=1 return r[n]
执行用时 :48 ms, 在所有 python3 提交中击败了82.33%的用户
内存消耗 :14 MB, 在所有 python3 提交中击败了5.00%的用户
——2019.10.24
就用很简单而又直观的套路完成了这道题。
public String countAndSay(int n) { if(n == 1){ return "1"; } if(n == 2){ return "11"; } String s = "11"; StringBuilder sb = new StringBuilder(); for(int i = 3;i<=n;i++){ int j = 0; while (j<s.length()){ char c = s.charAt(j); int num = 1; j++; while(j<s.length()){ if(s.charAt(j) == c){ j++; num++; }else{ sb.append(num); sb.append(c); num = 1; c = s.charAt(j); j++; } } sb.append(num); sb.append(c); } s = sb.toString(); sb = new StringBuilder(); } return s; }
——2020.7.7