【LeetCode】357. Count Numbers with Unique Digits 计算各个位数不同的数字个数(Medium)(JAVA)
题目地址: https://leetcode.com/problems/count-numbers-with-unique-digits/
题目描述:
Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10^n.
Example:
Input: 2
Output: 91
Explanation: The answer should be the total numbers in the range of 0 ≤ x < 100,
excluding 11,22,33,44,55,66,77,88,99
Constraints:
- 0 <= n <= 8
题目大意
给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10^n 。
解题方法
- 对于 n = 1,小于 10 的不用说就是 10 个
- 对于 n > 1,可以用排列组合的方式,第一个数不能是 0,所有有 9 中,第二个数排除第一个数,还有 9 个数,后续就是 8,7,6,…1, 所有组合的方式结果是: 9 * 9 * 8 * … * (9 - (n - 1))
class Solution {
public int countNumbersWithUniqueDigits(int n) {
if (n == 0) return 1;
if (n == 1) return 10;
int res = 10;
int product = 9;
for (int i = 0; i < n - 1; i++) {
product *= 9 - i;
res += product;
}
return res;
}
}
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:35.2 MB,击败了78.19% 的Java用户