[LeetCode]233. Number of Digit One

来源:互联网 发布:爱狗人士杨玉华 知乎 编辑:程序博客网 时间:2024/05/11 17:06

https://leetcode.com/problems/number-of-digit-one/?tab=Description

1 ~ n一共多少个1




找每一位上面有多少个1,三种情况:该位为0、该位为1、该位大于1

标红部分先除后乘,如果当前位置是0或者1,那么加上8之后除10依然舍去,大于一才保留。如果当前位置是1,如192的最高位,那么出现次数为92 + 1次

public class Solution {    public int countDigitOne(int n) {        int ones = 0;        for (long m = 1; m <= n; m *= 10) {            ones += (n / m + 8) / 10 * m + (n / m % 10 == 1 ? n % m + 1 : 0);        }        return ones;    }}




http://www.lintcode.com/en/problem/digit-counts/

统计0 ~ n中有多少个数字k



与上题类似,注意处理k=0的几个特殊case

class Solution {    public int digitCounts(int k, int n) {        // write your code here        if (k == 0 && n == 0) {            return 1;        }        int res = 0;        for (long m = 1; m <= n; m *= 10) {            if (k == 0 && m * 10 > n) {                break;            }            res += (n / m + 9 - k) / 10 * m + (n / m % 10 == k ? n % m + 1 : 0);        }        return res;    }};


0 0
原创粉丝点击