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