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.
?
public class Solution { public int countDigitOne(int n) { long res = 0; int left = n; int right = 0; int base = 1; while (left > 0) { int cur = left % 10; left = left / 10; right = n % base; if (cur == 1) { res += left * base; res += right + 1; } else if (cur == 0) { res += left * base; } else { res += (left+1) * base; } right = cur * base + right; base = base * 10; } return (int) res; } }
?
原文:http://hcx2013.iteye.com/blog/2253519