Leetcode每日一题-2021-8-13<数字 1 的个数;(规律)

Posted abestxun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode每日一题-2021-8-13<数字 1 的个数;(规律)相关的知识,希望对你有一定的参考价值。

链接:https://leetcode-cn.com/problems/number-of-digit-one/

题意:给定数字n,计算所有小于等于n的非负数中1的个数和

思路:计算每一个位为1的情况,对于某位,numl-i-numr,numl是前缀,numr是后缀,计算i=1时前缀和后缀满足构成的数字小于n的种类数

对于前缀为[0,numl)时,i=1,则numr可以为任何数,若numr长度为m,numr10^m中,对应种类数为numl*10^m
对于前缀为numl时,就需要根据i的情况来判断i=1时的种类数
i==0 时,i不能为1,相应种类数为0
i==1 时,当i=1,相应种类数为numr+1(numr=0的情况)
i>1 时,当i=1numr可以为任何数 相应种类数为10^m

代码:

class Solution {
public:
    vector<int> ans;
    void cou(int x){//将数转为数组
        if(x<10){
            ans.emplace_back(x);
            return ;
        }
        cou(x/10);
        ans.emplace_back(x%10);
    }
    int countDigitOne(int n) {
        int res=0,atm=0;
        cou(n);
        int len=ans.size();
        for(int i=0;i<len;i++){
            int t=i+1;
            res+=(atm*pow(10,(len-t)));
            atm=atm*10+ans[i];
            if(ans[i]>1){
                res+=pow(10,len-t);
            }
            else if(ans[i]==1){
                res+=n-atm*pow(10,len-t)+1;
            }
            
        }
        return res;
    }
};

以上是关于Leetcode每日一题-2021-8-13<数字 1 的个数;(规律)的主要内容,如果未能解决你的问题,请参考以下文章

《LeetCode之每日一题》:280.矩阵置零

每日一题系列-leetcode-525-连续数组

《LeetCode之每日一题》:264.递增的三元子序列

leetcode每日一题6月五号

leetcode每日一题6月五号

LeetCode9月 每日一题