第4周学习笔记

2020-04-08  本文已影响0人  jim_8432

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

题目:

思路:

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

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

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

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

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

代码:

总结:这道题一看看起来很简单,其实很让人容易写完之后发现之前的思路都是错误的,因为他会出现溢出的现象,所以,数学规律成为了主要的答题方式,并且这一技巧容易转换成代码来进行输出。做题的时候最好理清思维,不要去死磕。
上一篇下一篇

猜你喜欢

热点阅读