第4周学习笔记

1404. 将二进制表示减到 1 的步骤数

题目:

思路:

第一次解法(行不通,会超时):把二进制数通过Math.pow转化为十进制数。之后偶数除二,奇数加一,发现该解法超时并且数据大的时候会溢出,行不通。

第二种方法,找规律,可以发现,有两种情况。(这个解法很有趣)

第一种就是数字为奇数时(即结尾为1),数字进行+1操作后将变成偶数(即结尾为0),而后偶数只需进行移位,即可得到最终的结果。

比如说数字111,进行+1操作后,变成1000,移动3位,即可得到1(共4步,+1,移位,移位,移位)

又比如说数字1011,进行+1操作后,变成1100,移动两位后,变成11,再+1,此时数字为100.再移两位。(此处共6步)

代码:


总结:这道题一看看起来很简单,其实很让人容易写完之后发现之前的思路都是错误的,因为他会出现溢出的现象,所以,数学规律成为了主要的答题方式,并且这一技巧容易转换成代码来进行输出。做题的时候最好理清思维,不要去死磕。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容