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:

  1. Beware of overflow.
class Solution {
public:
    int countDigitOne(int n) {
        if(n <= 0)
            return 0;
        vector<int> v;
        int t = n;
        while(t)
        {
            v.push_back(t%10);
            t /= 10;
        }
        int l = v.size(), rest = n - v[l-1] * pow(10, l-1);
        return (v[l-1] > 1 ? pow(10, l-1) : rest + 1) + v[l-1] * (l-1) * pow(10, l-2) + countDigitOne(rest);
    }
};
时间: 2024-11-03 22:06:13

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

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八个

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

[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 { pub

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) {