计算各个位数不同的数字个数
此博客链接:
计算各个位数不同的数字个数
题目链接:https://leetcode-cn.com/problems/count-numbers-with-unique-digits/
题目
给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n 。
示例:
输入: 2
输出: 91
解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。
题解
题目是给一个位数,让求位数可以组成多少种不同的数字,示例给的2意思是给一个两位数,可以组成91中不同的数字。
我们可以先举例看,当给一位数时,可以组成10种数,0~9;
当给两位数时,第一位可以选1~9(9种),第二位可以选0~9,但是需要去掉和前面一位相同的数字(共9种),
当给三位数时,第一位可以选1~9(9种),第二位可以选0~9,但是需要去掉前面一位相同的数字(共9种),第三位可以选0~9,但是需要去掉前面两种数字(共8种)
......依次类推,当给n位数时,可以组成()
代码
class Solution { public int countNumbersWithUniqueDigits(int n) { if(n==0) return 1; int count=10; int temp=9; int p=9; for(int i=1;i<n;i++) { temp*=p; p--; count+=temp; } return count; } }
结果
出来混总是要还的