357. Count Numbers with Unique Digits

原创 2016年08月29日 16:45:54

题目

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].
分析

从最高位开始,分析每位可能的数字个数,如果n=1,有10种可能,n=2,则十位有9种(除去0),个位有9种(除去十位的选择,加上0),以此类推,得到f(k)函数,计算k位情况下每位不重复的数字个数,则在 0 ≤ x < 10n范围之内的数字个数为f(1)+f(2)+...+f(n)。

class Solution {
public:
    int countNumbersWithUniqueDigits(int n) {
        if(n==0)
            return 1;
        int countNumber=10;//计算总数,初始化为10
        int backtrack=9;//计算f(k)的前k-1项乘积,从第二位开始计算,故初始化为9
        if(n>10)//当n>10时,无法再构造更多的不重复数字,故大于10位都当做10位算
            n=10;
        for(int i=2;i<=n;++i)//从第二位开始计算f(k)
        {
            backtrack*=9-i+2;//计算f(k),得到k位不重复数字的数目
            countNumber+=backtrack;//与总数相加
        }
        return countNumber;
        
    }
};


UVA 10892 LCM Cardinality(数论 质因数分解)

LCM Cardinality Input: Standard Input Output: Standard Output Time Limit: 2 Seconds   A pair of numb...
  • LYHVOYAGE
  • LYHVOYAGE
  • 2014年10月17日 14:21
  • 1537

leetcode 204题求素数个数

Description: Count the number of prime numbers less than a non-negative number, n   提示晒数法: http://e...
  • wangyaninglm
  • wangyaninglm
  • 2015年04月28日 22:20
  • 2119

JQuery 1.10.2源码分析学习5

上源码 jQuery.extend({ // Unique for each copy of jQuery on the page // Non-digits removed to matc...
  • zzx252373003
  • zzx252373003
  • 2013年09月22日 11:37
  • 2432

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:...
  • TheSnowBoy_2
  • TheSnowBoy_2
  • 2017年06月18日 23:05
  • 272

leetcode_357 Count Numbers with Unique Digits

题意分析:给定非负的整数n,求在0
  • yzhang6_10
  • yzhang6_10
  • 2016年06月20日 10:02
  • 429

357. Count Numbers with Unique Digits

题目链接:https://leetcode.com/problems/count-numbers-with-unique-digits/ 题目描述: Given a non-negativ...
  • u011643312
  • u011643312
  • 2016年11月02日 20:31
  • 129

LeetCode笔记:357. Count Numbers with Unique Digits

计算唯一组成数出现的数量
  • Cloudox_
  • Cloudox_
  • 2017年01月10日 17:20
  • 443

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
  • 198

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

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

Leetcode-357- Count Numbers with Unique Digits C#

Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x n. Example: ...
  • u014056175
  • u014056175
  • 2016年06月28日 16:50
  • 250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:357. Count Numbers with Unique Digits
举报原因:
原因补充:

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