Number of Digit One 【leetcode】

299人阅读 评论(0)

﻿﻿

Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.

For example:
Given n = 13,
Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.

Hint:

1. Beware of overflow.

public class Solution {
public int countDigitOne(int n) {
int count=0;
for(int i=0;i<=n;i++){
String temp=new Integer(i).toString();
for(int j=0;j<temp.length();j++){
if(temp.charAt(j)=='1')
count++;
}

}
return count;
}
}

public int countDigitOne(int n) {

if(n<=0)return 0;
if(n<10)return 1;
int index=(int)Math.pow(10, new Integer(n).toString().length()-1);
int count=n/index;
int oneIndex=index;
if(count==1)
oneIndex=n-index+1;
int sum=countDigitOne(index-1)*count+oneIndex+countDigitOne(n-count*index);
return sum;
}

For example '8192':

1-999 -> countDigitOne(999)

1000-1999 -> 1000 of 1s + countDigitOne(999)

2000-2999 -> countDigitOne(999)

.

.

7000-7999 -> countDigitOne(999)

8000-8192 -> countDigitOne(192)

Count of 1s : countDigitOne(999)*8 + 1000 + countDigitOne(192)

Noticed that, if the target is '1192':

Count of 1s : countDigitOne(999)*1 + (1192 - 1000 + 1) + countDigitOne(192)

(1192 - 1000 + 1) is the 1s in thousands from 1000 to 1192.

﻿﻿
0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：3638次
• 积分：106
• 等级：
• 排名：千里之外
• 原创：7篇
• 转载：1篇
• 译文：0篇
• 评论：0条
文章存档
阅读排行