[LeetCode] Number of Digit One

来源:互联网 发布:电视机用网络看电视 编辑:程序博客网 时间:2024/06/04 18:05

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) {        if(n < 0)            return 0;        long factor = 1;        int result = 0;        while(factor <= n){            int left = n / (int) factor;            int right = n % (int) factor;            int leftDigit = left % 10;            if(leftDigit >= 2){                result += (left / 10 + 1) * factor;            }            else if(leftDigit == 1){                result += right + 1 + (left / 10) * factor;            }            else{                result += left / 10 * factor;            }            factor *= 10;        }        return result;    }}

思路详见:http://www.meetqun.com/thread-10288-1-1.html

0 0
原创粉丝点击