题意:
给定一个非负数n,要求算出所有符合条件的x。要求 0 ≤ x < 10^n,并且x的各位都不相同。
题解:
当n=0时,0<=x<1,因此只有x=0一种情况。
当n=1时,0<=x<10,即0-9共10种情况。
当n>=2时,最高位为1-9共9种情况,第二位不能与上一位相同但可以为0,因此也是9种情况,下一位是8种情况以此类推。
应此结果是f(1)+f(2)+f(3)+....+f(n)
而f(k) = 9 * 9 * 8 * ... (9 - k + 2) (k>=2)
代码:
public class Solution { public int countNumbersWithUniqueDigits(int n) { if(0 == n) return 1; if(1 == n) return 10; int sum = 10; for(int i=2; i<=n; i++) sum+=getMul(i); return sum; } //计算f(k) public int getMul(int n){ int result = 1; for(int i=9-n+2; i<=9; i++) result*=i; return result*9; } }
时间: 2024-10-10 06:38:51