LeetCode 357. 计算各个位数不同的数字个数
原题链接
中等
作者:
bruce
,
2021-02-23 20:07:00
,
所有人可见
,
阅读 333
/**
* 方法 1,根据通项公式,然后f(n) = 9 * (11 - i), i = 2, 3, 4, 5...找出除各个位上数字不相同的数字总和
* 推荐做法
* 如果n是0的话,那么只有1种,否则
* 一位数的满足要求的数字是10个(0到9);
* 二位数的满足题意的是81个,[10 - 99]90个数字中去掉[11, 22, 33, 44, 55, 66, 77, 88, 99]这9个数字,所以还剩81个
* 通项公式,然后f(n) = 9 * (11 - i)
*/
int countNumbersWithUniqueDigits(int n)
{
if (n == 0)
return 1;
int res = 10, cnt = 9; // res 是一位数的结果10,然后i从2开始,res累加从2位数开始
for (int i = 2; i <= n; ++i)
{
cnt *= (11 - i); // 两位数的时候使用递推公式来写
res += cnt; // 最后res累加即可返回
}
return res;
}