357.统计各位数字都不同的数字个数

116 阅读1分钟

** 题目:**
给你一个整数 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
}