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 #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...

Leetcode 357. Count Numbers with Unique Digits 统计没有重复数字的数 解题报告

1 解题思想这道题其实是一个高中数学题(其实也是考研概率论的题目) 其做法也就是一个排列组合的关系,因为我们需要统计0~10^n里面不包含重复数字的所有数字,所以其实很简单: 对于位数为i的情况 ...

leetcode_357 Count Numbers with Unique Digits

题意分析:给定非负的整数n,求在0<=x<10^n中,有多少每个位上的数字互不相同的数?如n=2时,范围为[0,100],共有91个数(除了11,22,33,44,55,66,77,88,99)。 解...

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 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...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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