显而易见的动态规划
先不看二重循环,
先只考虑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;
    }
};