没用过Leetcode刷题,只能按照自己的想法随便写写了
思路:1.第一位数有9种(除了0)可能,第二位数有9种(除了第一位)可能,第三位数有8种(除了前两位)可能,以此类推...9*8*7*...(9-i+2)种;
2.当n>=10时,后面必定有重复数字,不能算进去,所以和n=10的种数相同
#include<bits/stdc++.h> int dp[100]; int main() { int n; scanf("%d",&n); dp[0]=1,dp[1]=10; for(int i=2;i<=n;i++){ int j=9-i+2,t=1; while(j<=9){ t*=j; j++; } if(i<=10) dp[i]+=(dp[i-1]+9*t); else dp[i]=dp[10]; } for(int i=0;i<=n;i++) printf("%d ",dp[i]); }