博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
边工作边刷题:70天一遍leetcode: day 61
阅读量:4979 次
发布时间:2019-06-12

本文共 945 字,大约阅读时间需要 3 分钟。

Number of Digit One

要点:从低到高每一位累加,需要highbits,lowbits,base。基本的rule是每隔base会有1个one,一共多少个base?有3种情况>1, ==1, <1。>1有highbits+1,<1有highbits,==1有highbits还要加上lowbits+1

另一个重点是highbits,lowbits,curbit和base的关系:base是从1开始,和curbit是对应的。所以highbits是curbit左边的数,所以要/(base*10)。lowbits是右边的数,所以%base(所以在个位为%1==0)。curbit就是/base%10
错误点:

  • loop invariant是n/base>0,而不是n
  • highbits/lowbits/curbit要在loop内更新
class Solution(object):    def countDigitOne(self, n):        """        :type n: int        :rtype: int        """        base = 1        count = 0        while n/base>0:            highbits = n//(base*10)            lowbits = n%base            curbit = n%(base*10)//base            if curbit<1:                count+=highbits*base            elif curbit==1:                count+=highbits*base+lowbits+1            elif curbit>1:                count+=(highbits+1)*base            base*=10                return count

转载于:https://www.cnblogs.com/absolute/p/5690332.html

你可能感兴趣的文章
Java高新技术 类加载器
查看>>
js原型
查看>>
Android开发 自制圆形带进度显示的进度条
查看>>
.Net IE10 _doPostBack 未定义
查看>>
MVC ashx 中禁用Html标签请求验证
查看>>
9-lvs-lvs集群-及keepalived健康检查
查看>>
转:后端开源软件集合
查看>>
2016级算法第三次上机-D.双十一的抉择
查看>>
工作中的。学习
查看>>
洛谷 P1892 [BOI2003]团伙(并查集)
查看>>
UVA10763 交换学生 Foreign Exchange 题解
查看>>
精益管理
查看>>
python爬某个网站的图片
查看>>
SDN第二次上机作业
查看>>
关于行和列的算法
查看>>
机器学习方法(七):Kmeans聚类K值如何选,以及数据重抽样方法Bootstrapping
查看>>
【Linux 运维】 安装PHP工具Composer
查看>>
深度学习笔记之目标检测算法系列(包括RCNN、Fast RCNN、Faster RCNN和SSD)
查看>>
机器学习概念之特征转换(Feature conversion)
查看>>
全网最详细的一个超级好用的命令行工具【Cmder】的优点有哪些?
查看>>