您的位置:首页 > 产品设计 > UI/UE

357. Count Numbers with Unique Digits 题解

2017-05-25 17:47 148 查看
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]
)

题目链接:357. Count Numbers with Unique Digits


算法描述:

          由题意知,给定一个非负数 “n” ——表示数字的位数,我们将返回这个位数以内没有重复数字的个数。

       我们可以统计规律,当位数为 “0” 时,返回1。当位数为 “1”时,我们知道 “0” 到 “9” 任何数都满足规律,返回10。

当位数大于等于 “2” 时,我们需要用排列组合的方法来求,当位数为 “n” 时,构造数的最高为可以选择除 “0” 以外的所有数,一共有9个,次高位可以选择除最高位的9个数,之后依次递减。所以,公式为 “9 * 9 * 8 * 7···· * ( 9 - n + 2 )”。当位数为 “n-1” 时,构造数的如上方法构造。·······

        最后,我们返回 “n” 位数的构造数加上 “n-1” 位数的构造数,加上 “n-2” 位数的构造数····,加上 “1” 位数的构造数。

       

代码:

class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
if(n == 0){
return 1;
}
if(n == 1){
return 10;
}

int temp = 9;
int ans = 10;
for(int i=2; i<=n; i++){
temp *= (9-i+2);
ans += temp;
}

return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: