leetcode算法题--计算各个位数不同的数字个数

原题链接:https://leetcode-cn.com/problems/count-numbers-with-unique-digits/
一开始没有思路,没做出来,看了题解之后
动态规划思路:

dp[0] = 1
dp[1] = 9(原因是0不能作为首字母被选择,所以dp实际表示的有多少种不同排列的数字,而不是数字组合)
dp[2] = 9x9
dp[3] = 9x9x8
dp[4] = 9x9x8x7
dp[5] = 9x9x8x7x6
dp[6] = 9x9x8x7x6x5
dp[7] = 9x9x8x7x6x5x4
dp[8] = 9x9x8x7x6x5x4x3
dp[9] = 9x9x8x7x6x5x4x3x2
dp[10] = 9x9x8x7x6x5x4x3x2x1

动态规划:

dp[i] i代表位数,dp[i]代表符合条件的数字个数

于是有状态转移:

dp[i]=dp[i-1]*(10-i)

代码:

 int countNumbersWithUniqueDigits(int n) {
     if(n==0) return 1;
     vector<int>dp(n,0);
     dp[0]=9;
     for(int i=1;i<=n-1;i++){
         dp[i]=dp[i-1]*(10-i);
     }
     int sum=0;
     for(int i=0;i<=n-1;i++){
         sum+=dp[i];
     }
     return sum+1;
 }
发布了111 篇原创文章 · 获赞 12 · 访问量 8万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览