Number of Digit One leetcode
2016-08-01 10:15
246 查看
Number of Digit One
本题思路为分有几个1的情况讨论,即有1个1时,有2个1时......
首先计算位数,然后分别统计最高变化的情况和最高位保持不变的情况,比如21分20以下和20以上的;
子函数有两个,功能求
组合数:C(m,n)=m!/[n!(m-n)!]
AC代码:
本题思路为分有几个1的情况讨论,即有1个1时,有2个1时......
首先计算位数,然后分别统计最高变化的情况和最高位保持不变的情况,比如21分20以下和20以上的;
子函数有两个,功能求
组合数:C(m,n)=m!/[n!(m-n)!]
AC代码:
class Solution { public: int plzh(int m){ int res=1; for(int i=2;i<=m;i++) res*=i; return res; } int pick(int i,int j){ return plzh(i)/(plzh(j)*plzh(i-j)); } int countDigitOne(int n) { int num=1,m=n,res=0; if(n<=10) return n<1?0:(n==10?2:1); while(m/10) {m=m/10;num++;} if(n==pow(10,num-1)) res+=countDigitOne(n-1)+1; else { if(m>1) for(int i=1;i<num+1;i++){ res+=pick(num-1,i-1)*pow(9,num-i)*i; if(num>i) res+=(m-1)*pick(num-1,i)*pow(9,num-i-1)*i; } //首位为m int x=m*pow(10,num-1); if(m==1) res+=n-x+countDigitOne(x); res+=countDigitOne(n-x); } return res; } };
相关文章推荐
- [LeetCode] Number of Digit One
- LeetCode "Number of Digit One"
- LeetCode-Number of Digit One(编程之美-1的数目)
- LeetCode(233) Number of Digit One
- [LeetCode] Number of Digit One 数字1的个数
- [leetcode] Number of Digit One
- [LeetCode]Number of Digit One,解题报告
- 【LeetCode-Hard-2】【Number of Digit One】【1~N中‘1’出现次数】
- LeetCode ||Number of Digit One
- leetcode 233: Number of Digit One
- Number of Digit One(leetcode 233)
- LeetCode-Number of Digit One-解题报告
- [LeetCode 233] Number of Digit One
- Leetcode233-Number of Digit One
- Leetcode 233 Number of Digit One
- 【LeetCode】(233)Number of Digit One (Medium)
- leetcode 日经贴,Cpp code -Number of Digit One
- leetcode 233 Number of Digit One
- [Leetcode 233, Medium] Number of Digit One
- Leetcode233 Number of Digit One