Count Numbers with Unique Digits

原创 2016年08月29日 10:33:11

Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n.

Example:
Given n = 2, return 91. (The answer should be the total numbers in the range of 0 ≤ x < 100, excluding [11,22,33,44,55,66,77,88,99])

Hint:

  1. A direct way is to use the backtracking approach.
  2. Backtracking should contains three states which are (the current number, number of steps to get that number and a bitmask which represent which number is marked as visited so far in the current number). Start with state (0,0,0) and count all valid number till we reach number of steps equals to 10n.
  3. This problem can also be solved using a dynamic programming approach and some knowledge of combinatorics.
  4. Let f(k) = count of numbers with unique digits with length equals k.
  5. f(1) = 10, ..., f(k) = 9 * 9 * 8 * ... (9 - k + 2) [The first factor is 9 because a number cannot start with 0].
思路:这是个数学题,可视化之后发现规律:
1位:f(1) =  10
2位:  f(2) = 9*9
3位:f(3) = 9*9*8
4位:f(4) = 9*9*8*7
注意最后算的时候是要算之前的和。比如:3位的时候,需要计算 1位+2位+3位的情况和。
public class Solution {
    public int countNumbersWithUniqueDigits(int n) {
        if(n==0) return 1;
        int countbit = 0;
        int rn = (int)Math.pow(10,n);
        while(rn!=0){
            rn = rn/10;
            countbit++;
        }
        countbit--;
        if(countbit == 1){
            return 10;
        } else {
            int fres = 0;
            int res = 9;
            for(int i=2; i<=countbit; i++){
                res *=  (9-i+2);
                fres += res;
            }
            fres += 10;
            return fres;
        }
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

<LeetCode OJ> 357. Count Numbers with Unique Digits

Total Accepted: 450 Total Submissions: 1077 Difficulty: Medium Given a non-negative integer n, ...

[DP]357. Count Numbers with Unique Digits

题目: Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x n. Exam...

LeetCode 357. Count Numbers with Unique Digits

357. Count Numbers with Unique DigitsGiven a non-negative integer n, count all numbers with unique d...

【算法作业15】LeetCode 357. Count Numbers with Unique Digits

第十五周算法作业:LeetCode 357. Count Numbers with Unique Digits

357. Count Numbers with Unique Digits统计各位不同的数字个数

Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x n. Example: G...

leetcode -- 357. Count Numbers with Unique Digits 【数学表达 + 递推 + 破坏递推的情况的排除+回溯】

题目 Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x n. Example:...

leetcode_357 Count Numbers with Unique Digits

题意分析:给定非负的整数n,求在0

357. Count Numbers with Unique Digits

题目链接:https://leetcode.com/problems/count-numbers-with-unique-digits/ 题目描述: Given a non-negativ...

LeetCode笔记:357. Count Numbers with Unique Digits

计算唯一组成数出现的数量

LeetCode #357 - Count Numbers with Unique Digits - Medium

ProblemGiven a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. H...
  • Arcome
  • Arcome
  • 2016年11月02日 08:10
  • 175
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Count Numbers with Unique Digits
举报原因:
原因补充:

(最多只允许输入30个字)