** 题目:**
给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10n 。
** 算法:**
考虑题目的角度很重要,考虑特殊的n取值,然后考虑一般取值。
从高位到低位考虑
func countNumbersWithUniqueDigits(n int) int {
if n == 0 {
return 1
}
if n == 1 {
return 10
}
// n >= 2时
// 最高位不能含有前导0,1~9,9个数可选
// 次高位0~10,9个数可选
// 次次高位0~10,8个数可选,以此类推
ans, curCount := 10, 9
for i := 0; i < n-1; i++ {
curCount = curCount * (9 - i)
ans = ans + curCount
}
return ans
}