没用过Leetcode刷题,只能按照自己的想法随便写写了

思路:1.第一位数有9种(除了0)可能,第二位数有9种(除了第一位)可能,第三位数有8种(除了前两位)可能,以此类推...9*8*7*...(9-i+2)种;

2.当n>=10时,后面必定有重复数字,不能算进去,所以和n=10的种数相同

#include<bits/stdc++.h>
int dp[];
int main()
{
int n;
scanf("%d",&n);
dp[]=,dp[]=;
for(int i=;i<=n;i++){
int j=-i+,t=;
while(j<=){
t*=j;
j++;
}
if(i<=)
dp[i]+=(dp[i-]+*t);
else
dp[i]=dp[];
}
for(int i=;i<=n;i++)
printf("%d\n",dp[i]);
}
05-23 21:28