显而易见的动态规划
先不看二重循环,
先只考虑a[i]+=(a[i-1]+a[i-2])9这句话
啥意思呢
对于i位数的答案,是与i-1位和i-2位的答案有关系的
假设a[i]表示i位数中满足条件的数,如果没有连续的6
(1)第i位是0,1,2,3,4,5,7,8,9,第i-1位随便
(2)第i位是6,第i-1位是0,1,2,3,4,5,7,8,9,第i-2位随便
a[i]+=(a[i-1]+a[i-2])9;
感谢某人提醒~
剩下的[j]高精度就是最基本的啦
class Solution { public: /** * * @param n int整型 * @return string字符串 */ int a[100][100]; string calculate(int n) { // write code here if (n == 1) return "10"; int i,j; a[1][1]=0; a[1][2]=1; a[2][1]=a[2][2]=9; for(i=3;i<=n;i++) for(j=1;j<=i;j++) { a[i][j]+=(a[i-1][j]+a[i-2][j])*9; if(a[i][j]>=10&&a[i][j]<100) { a[i][j+1]+=a[i][j]/10; a[i][j]=a[i][j]%10; } if(a[i][j]>=100) { a[i][j+2]+=a[i][j]/100; a[i][j+1]+=a[i][j]/10%10; a[i][j]%=10; } } string str(""); for(i=n;i>0;i--) str.append(to_string(a[n][i])); return str; } };