Leetcode解题报告——357. Count Numbers with Unique Digits

题目要求:
Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n.

Example:
Given n = 2, return 91. (The answer should be the total numbers in the range of 0 ≤ x < 100, excluding [11,22,33,44,55,66,77,88,99])

题目大意:
给定非负整数 n ,求 由不同数字组成的数 X ( 0 ≤ X < 10^n ) 的数目

思路分析:
令 F(n),G(n) 表示 n 中 X 的数目,则:
F (0 ≤ X < 10^n ) = F( 0 ≤ X < 10^n-1) + G ( 10^n-1 ≤ X < 10^n )
G ( 10^n-1 ≤ X < 10^n ) 表示为 位数 为 n 的 X 的数目
这是一个排列组合问题: 9 * 8 * 7 * 6.....
根据上述思路,我们使用动态规划就可以解决这次的问题。

全部代码:

public int countNumbersWithUniqueDigits(int n) {
 //dp[i] 表示的是位数为 i 的 X 的数量,即G(n)
        int [] dp = new int[n+1];
        dp[0] = 1;
        int result = 1;
        for (int i = 1; i <=n ; i++) {
             if(i == 1) dp[i] = 9;
             else dp[i] = dp[i-1]*(11-i);
             result += dp[i];
        }
        return result;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 有道是,和女朋友吵架吵赢的,最终都成功分手了。 可惜懂得这个道理的直男,十中取一。 几乎每天都有直男来找我:“踢踢...
    傅踢踢阅读 7,756评论 18 40
  • Git 在保存和对待各种信息的时候与其它版本控制系统有很大差异,尽管操作起来的命令形式非常相近。Git有以下特点:...
    _Lily阅读 3,570评论 0 1
  • 一直相信有些相逢是命中注定,就像茫茫人海中,有些人转眼间便消失在各自的生命里,而有些人却能深深烙进心底。 时光匆匆...
    文艺旅者阅读 3,401评论 0 1
  • 为什么每天我们总能在网络看到这么多的篮球天才少年 6岁便能翻云覆雨,运球出神入化 8岁就能纵观全场,气势长虹 12...
    篮圈的世界阅读 1,482评论 0 0