本篇内容主要讲解“如何编写代码实现将数字变成0的操作次数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何编写代码实现将数字变成0的操作次数”吧!
问题描述
给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。
为了方便理解题意,下面给出两个示例:
示例 1:
输入:num = 14
输出:6
解释:
步骤 1) 14 是偶数,除以 2 得到 7 。
步骤 2) 7 是奇数,减 1 得到 6 。
步骤 3) 6 是偶数,除以 2 得到 3 。
步骤 4) 3 是奇数,减 1 得到 2 。
步骤 5) 2 是偶数,除以 2 得到 1 。
步骤 6) 1 是奇数,减 1 得到 0 。
示例 2:
输入:num = 8
输出:4
解释:
步骤 1) 8 是偶数,除以 2 得到 4 。
步骤 2) 4 是偶数,除以 2 得到 2 。
步骤 3) 2 是偶数,除以 2 得到 1 。
步骤 4) 1 是奇数,减 1 得到 0 。
(来源:力扣)
解决方案
首先,由题意可知:题目要求给出一个非负整数num,返回将它变成零所需要的次数,并要求当数为偶数时,需要将其除以2,为奇数时,将其减去1。如此重复操作,直到将其变为0,最后返回操作的次数。
然后,我们再来找出里面的关键点:首先是num是一个非负整数,所以我们代码不需要对数的类型进行判断,其次是当这个数足够大的时候肯定会经过许多次减去1或者是除以2的操作,那么肯定会用到循环。我们再进一步思考,常用的循环主要有for循环和while循环,那么针对本道题目,选取哪一种循环更好呢?于是我们再进一步思考,for循环一般用于在知道循环次数的情况下,在目标循环次数内进行操作,而while循环一般用于不知道循环次数情况下,在条件范围内循环,满足条件后直接退出循环。可见,对比两种循环后,针对本道题目,选择while循环更合适。
最后,在确定循环后,不要着急写代码,题目中还有要求,当该数变成偶数时,需要除以2,为奇数时,需要减去1。所以,在while循环中,我们还需要加入判断语句。这样才能在题目要求范围内完成题目。
也许大家现在有一个疑问,for循环是在知道循环次数的情况下进行操作,进而很容易统计循环次数,但while循环是满足条件就跳出循环,要怎样统计循环次数呢?这个问题其实很简单,我们只需要在循环外定义一个初始值为0的变量,然后每循环一次就加1,这样在循环完成后,循环次数也就统计出来啦!
下面请看题解代码:
def math(): num = int(input('')) a = 0 while num != 0: if num % 2 == 0: num = num / 2 a = a + 1 elif num % 2 != 0: num = num - 1 a = a + 1 return a print(math()) |
测试结果:
上述代码适合于大多数朋友的思路,本人也在其他地方找到了其他的思路,现在将代码分享给大家共勉:
class Solution: def numberOfSteps (self, num: int) -> int: return bin(num).count('1') + num.bit_length() - 1 |
到此,相信大家对“如何编写代码实现将数字变成0的操作次数”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。