zoukankan      html  css  js  c++  java
  • Count Numbers with Unique Digits

    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,找出[0,10^)之间各个位上数字不重复出现的数的个数,如n = 3,找出[0,1000)之间符合标准的数,如123,245,但122不符合要求,2重复出现。

    根据提示,题目可以用回溯和动态规划解决。这里使用的动态规划做的。看了讨论区,复杂度还可以降低

     1 public class Solution {
     2     public int countNumbersWithUniqueDigits(int n) {
     3         if(n == 0)
     4             return 1;
     5         int result[] = new int[11];
     6         result[1] = 10;     
     7       
     8         int preFactor = 9;
     9         for(int i = 2; i <= 10 && i <= n; i++){
    10             preFactor *= (9 - i + 2);
    11             result[i] = (preFactor + result[i - 1]);
    12         }//for
    13         
    14         if(n > 10)
    15             return result[10];
    16         return result[n];
    17     }
    18 }
  • 相关阅读:
    php之static静态变量详解
    设计模式【代理模式】
    小牟Andorid下面MD5具体实现的思路总结
    ubuntu14.04安装MySQL
    Android手机定位技术的发展
    我不同意你,这是您的支持
    我要遵守11文章数据库设计指南
    quick-cocos2d-x游戏开发【3】——display.newSprite创建向导
    第二章 自己的框架WMTS服务,下载数据集成的文章1
    JSTL实现int数据的类型的长度
  • 原文地址:https://www.cnblogs.com/luckygxf/p/5586545.html
Copyright © 2011-2022 走看看