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 }
  • 相关阅读:
    RadioButton练习(android)
    关于 RArrayFixFlat 与 RArray 与 CArrayPtrFlat 的测试
    How do I add an attachment to the message
    Grid View
    android 布局文件属性说明(转)
    File 存储(android)
    How to Make an HTTP Connection Using TCP/IP with RSocket
    使用RHTTPTransaction后产生CONE 36 Panic的解决办法
    SharedPreferences 存储(android)
    对话框的练习(android)
  • 原文地址:https://www.cnblogs.com/luckygxf/p/5586545.html
Copyright © 2011-2022 走看看