LeetCode233 数字 1 的个数

LeetCode233 数字 1 的个数

枚举每一个数位为1时存在多少种满足小于等于n的数字

  • 当前数位大于1,不存在限制,存在数字个数为左边 \(\times\) 右边
  • 当前数位等于1,右边存在限制,当左边等于n的部分时,右边必须满足小于等于n的条件
  • 当前数位等于0,右边存在限制,当左边等于n的部分时,不满足情况,左边必须小于n的部分时,当前数位才可置1
class Solution:
    def countDigitOne(self, n: int) -> int:
        
        i, ans = 1, 0
        while i <= n:

            cur_bit = (n // i) % 10
            if cur_bit == 1: ans = ans + (n // (i * 10)) * i + (n % i) + 1
            elif cur_bit == 0: ans = ans + (n // (i * 10)) * i
            else: ans = ans + (n // (i * 10) + 1) * i

            i = i * 10 
        
        return ans

posted on 2022-06-29 19:30  solvit  阅读(24)  评论(0编辑  收藏  举报

导航