zoukankan      html  css  js  c++  java
  • 357. 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])

    题目含义: 给定一个数字N 找出 0≤ x < 10n中各位数字都不相同的数的个数。

    方法一:这里n代表整数的位数,当n=1时因为只有一个数字,所以0-9都是答案.当n>=2时,最高位可以为1-9任意一个数字,之后各位可以选择的数字个数依次为9, 8, 7, 6...1,通项公式为f(k) = 9(第一位的可选数量,从1到9共9个) * 9(第二位的可选数量,0-9共10个数中抛去第一位使用了的) * 8(第三位的可选数量,0-9共10个数中抛去前两位使用了的)  * ... (9 - k + 2),

    那么我们就可以根据n的大小,把[1, n]区间位数通过通项公式算出来累加起来即可  

     1     public int countNumbersWithUniqueDigits(int n) {
     2 //   这里n代表整数的位数,当n=1时因为只有一个数字,所以0-9都是答案.当n>=2时,最高位可以为1-9任意一个数字,之后各位可以选择的数字个数依次为9, 8, 7, 6...1   二位数的满足题意的是81个,[10 - 99]这90个数字中去掉[11,22,33,44,55,66,77,88,99]这9个数字,还剩81个。
     3 //  通项公式为f(k) = 9 * 9 * 8 * ... (9 - k + 2),那么我们就可以根据n的大小,把[1, n]区间位数通过通项公式算出来累加起来即可        
     4         if(n==0) return 1;  
     5         if(n==1) return 10;  
     6         int val = 9, ans = 10;  
     7         for(int i = 2; i <= n; i++)  
     8         {  
     9             val *= (9-i+2);  
    10             ans += val;  
    11         }  
    12         return ans;
    13     }
  • 相关阅读:
    CSS箭头
    rails 路由正则表达式
    centos6.7 配置MongoDB日志
    centos6.7 配置Elasticsearch
    拼音纠错
    Pandas学习笔记
    WebService using Spring throwed org.xml.sax.SAXException: Bad envelope tag: htm
    怎样让Windows任务管理器CPU占用率呈现正玄曲线(解释+C#实现)
    Deepin Linux获得关注,国产GUI值得提倡
    Swing组件的另类嵌套
  • 原文地址:https://www.cnblogs.com/wzj4858/p/7694312.html
Copyright © 2011-2022 走看看