[leedcode 233] Number of Digit One

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) {
       /* intuitive: 每10个数, 有一个个位是1, 每100个数, 有10个十位是1, 每1000个数, 有100个百位是1.  做一个循环, 每次计算单个位上1得总个数          (个位,十位, 百位).
        例子:
        以算百位上1为例子:   假设百位上是0, 1, 和 >=2 三种情况:
            case 1: n=3141092, a= 31410, b=92. 计算百位上1的个数应该为 3141 *100 次.
            case 2: n=3141192, a= 31411, b=92. 计算百位上1的个数应该为 3141 *100 + (92+1) 次.
            case 3: n=3141592, a= 31415, b=92. 计算百位上1的个数应该为 (3141+1) *100 次.
        以上三种情况可以用 一个公式概括:
            (a + 8) / 10 * m + (a % 10 == 1) * (b + 1);*/

            //因为当n为int最高位(10)位时,当m<=n,此时m*10会超出32int范围,所以需要将m声明为long
        int res=0;
        for(long m=1;m<=n;m=m*10){
            int a=n/(int)m;
            int b=n%(int)m;
            res+=(a+8)/10*m;
            if(a%10==1) res+=b+1;
        }
        return res;
    }
}
时间: 2024-08-25 11:50:08

[leedcode 233] Number of Digit One的相关文章

LeetCode 233. Number of Digit One

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. 本来想凑一个关于阶乘的题目,做个笔记,不枉我昨天A八个

233. Number of Digit One *HARD* -- 从1到n的整数中数字1出现的次数

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: Beware of overflow. c

Java for LeetCode 233 Number of Digit One

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. 解题思路: 递归 static public in

【LeetCode】233. Number of Digit One

题目: 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. 代码: class Solution {

233. Number of Digit One

题目: 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. 链接: http://leetcode.com

(*medium)LeetCode 233.Number of Digit One

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

233. Number of Digit One(统计1出现的次数)

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. 按不同位置统计 31456 统计百位时: (0-31)

[LeetCode]233 Number of Digit One(数位DP)

题目链接:https://leetcode.com/problems/number-of-digit-one/?tab=Description 题意:求[1,n]内1的个数. 裸数位DP,好久不写都快不会写了..这么水 1 class Solution { 2 public: 3 int dp[30][30]; 4 int digit[30]; 5 6 int dfs(int l, int cnt, bool flag) { 7 if(l == 0) return cnt; 8 if(!flag

233 Number of Digit One 数字1的个数

给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,11,12,13. 详见:https://leetcode.com/problems/number-of-digit-one/description/ 方法一: class Solution { public: int countDigitOne(int n) { int cnt=0; for(long long m=1;m<=n;m*=10) {