您的位置:首页 > 其它

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dfs class leetcode