Leetcode 357. Count Numbers with Unique Digits 统计没有重复数字的数 解题报告
来源:互联网 发布:用友网络未来市值万亿 编辑:程序博客网 时间:2024/06/05 02:34
1 解题思想
这道题其实是一个高中数学题(其实也是考研概率论的题目)
其做法也就是一个排列组合的关系,因为我们需要统计0~10^n里面不包含重复数字的所有数字,所以其实很简单:
对于位数为i的情况
1、第一位不能为0,所以要从1~9里面挑一个C(9,1)种组合方式
2、之后的i-1位,1~9里面任意挑选I-1个出来,共计C(9,i-1)种组合方式
3、对于之后I-1的数字,共有A(i-1,i-1) 或者理解为(i-1)! 种排列方式
4、上面三个相乘就是目标结果了。
特列:
对于n=0和1需要特殊处理,简单,不说了
因此,解法就是把从0到n都算一遍相加就好了。。喵
2 原题
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])
3 AC解
public class Solution { /** * 这里用来做阶乘的 * */ public static int[] cache = new int[16]; public int fact(int n){ if(n>1 && cache[n]==0) cache[n]=fact(n-1)*n; return cache[n]; } /** * 数学里的那个选择函数。。不过抱歉,我忘了叫什么名字了,选择? * */ public int C(int a,int b){ return fact(a)/(fact(b) * fact(a-b)); } /** * 数学里的那个选择函数。。计算机里就是a个数组挑b个进行排列组合 * */ public int A(int a,int b){ return fact(a)/fact(a-b); } public int countNumbersWithUniqueDigits(int n) { cache[1] = 1; cache[0] = 1; int result = 1; if (n >=1) result += 9; //除了开头不能为0以外,其他都可以 for(int i=2;i<=n;i++) result += C(9,1)*C(9,i-1)*A(i-1,i-1); return result; }}
0 0
- Leetcode 357. Count Numbers with Unique Digits 统计没有重复数字的数 解题报告
- [leetcode] 357. Count Numbers with Unique Digits 解题报告
- leetcode 357. Count Numbers with Unique Digits 解题报告
- LeetCode 357. Count Numbers with Unique Digits 解题报告
- LeetCode解题报告 357. Count Numbers with Unique Digits [medium]
- [Leetcode] 357. Count Numbers with Unique Digits 解题报告
- leetcode_357. Count Numbers with Unique Digits 统计不含重复数字的数的个数
- 357. Count Numbers with Unique Digits解题报告
- LeetCode 357. Count Numbers with Unique Digits(计算无重复数字)
- 357.leetcode Count Numbers with Unique Digits(easy)[数学问题 非重复数字]
- 357. Count Numbers with Unique Digits统计各位不同的数字个数
- 【LeetCode】357. Count Numbers with Unique Digits
- LeetCode 357. Count Numbers with Unique Digits
- [leetcode] 357. Count Numbers with Unique Digits
- 【LeetCode】357. Count Numbers with Unique Digits
- leetcode 357. Count Numbers with Unique Digits
- leetcode 357. Count Numbers with Unique Digits
- leetcode.357. Count Numbers with Unique Digits
- mybatis入门---增删查改操作
- python 构建client 程序
- haproxy timeout server 46000 后台超时时间
- sqlsever2005语句
- 9. Palindrome Number
- Leetcode 357. Count Numbers with Unique Digits 统计没有重复数字的数 解题报告
- Android NDK生成共享库和静态库
- GC调优在Spark应用中的实践
- 线性模型
- java--正则表达式
- MyEclipse建立SpringMVC入门
- Android之SurfaceView的简单介绍
- LeetCode题解-100-Same Tree
- java基础/集合框架/set/hasset/linkHasset/TreeSet/