233. Number of Digit One
2016-11-06 20:21
225 查看
public class Solution { public int countDigitOne(int n) { if(n<=0)return 0; return dfs(n); } private int dfs(int n){ int length = size(n); if(length==1){ if(n==0)return 0; else{ return 1; } } if(length>1){ int count=0;//首位一的个数 int len = (n-(shengcheng(length-1)+1))/(shengcheng(length-1)+1);//shengcheng(length-1)+1,其实就是生成整跟n相同位数的整十数,如10,100,1000,10000000, int firstNum = n/(shengcheng(length-1)+1); int behindNum = n-firstNum*(shengcheng(length-1)+1); if (len>0)count=shengcheng(length-1)+1; else { count = n-(shengcheng(length-1)+1)+1; } return dfs(shengcheng(length-1))+len*dfs(shengcheng(length-1))+count+dfs(behindNum); }//比如321=dfs(99)+2*dfs(99)+100+dfs(21),dfs(1092)=dfs(999)+0*dfs(999)+92+dfs(92),那321来看最合适 return 0; } public int size(int n){//测量数的位数 int count = 1; while (n/10>0){ n = n/10; count++; } return count; } public int shengcheng(int n){//生成99.999.9999这样的数三位就是999,4位就是9999 int count=1; for(int i=0;i<n;i++) count = count*10; return count-1; } }
相关文章推荐
- [Leetcode] 233. Number of Digit One 解题报告
- leetcode 233. Number of Digit One
- 算法Week02.04 - LeetCode 233. Number of Digit One
- leetcode 233. Number of Digit One
- 【LeetCode】233. Number of Digit One
- 233. Number of Digit One
- 233. Number of Digit One
- Leetcode 233. Number of Digit One
- 233. Number of Digit One
- leetcode 233. Number of Digit One
- [leetcode]233. Number of Digit One
- leetcode233. Number of Digit One
- 233. Number of Digit One
- leetcode 233. Number of Digit One
- 233. Number of Digit One 详细解答
- 233. Number of Digit One【H】【33】【再来一遍】
- 233. Number of Digit One
- Leetcode 233. Number of Digit One (Medium) (cpp)
- leetcode 233. Number of Digit One 从1到n的数组中出现数字1的数量 + 寻找规律,公式计算
- [leetcode]233. Number of Digit One