leetcode刷题01-将二进制表示减到 1 的步骤数

in hive-180932 •  2 years ago  (edited)

@justyy刷题刷的那么欢乐,我也开始刷题了。

不得不说,这刷题真难………有点高考的时候老师专门出题刁难人的感觉。

今天的题目是:

image.png

难得的一道我能清楚看懂题目说什么的题。

我的解题思路很直接,直接把这个数先除以2,能整除就是偶数,除以2.否则就是奇数加一。然后计算需要的步数。

代码如下:

class Solution:
    def numSteps(self, s: str) -> int:
        s=int(s,2)
        nums=0
        while s != 1:
            if s % 2 == 0:
                s//=2
            else:
                s+=1
            nums += 1
        return nums

image.png

后来想着,第一步先直接判断尾数是0还是1,或许能少计算一点,速度会快一点儿。于是就试试写着看看。

class Solution:
    def numSteps(self, s: str) -> int:
        k=s
        if s[-1:] == "1":
            s = int(s,2)+1
        else:
            s=int(s,2)//2
        nums=1
        while s != 1:
            if s % 2 == 0:
                nums += 1
                s//=2
            else:
                nums += 1
                s+=1
        else:
            if k=="1":
                nums=0
        return nums

虽然代码很长很傻逼,但是,真的快了。

image.png

算法这玩意真TM神奇~

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

拍拍