美文网首页
『位运算』将数字变成 0 的操作次数1342

『位运算』将数字变成 0 的操作次数1342

作者: iamlightsmile | 来源:发表于2020-03-29 22:44 被阅读0次

题目相关

题目解读

如果是基本思路的话,则是模拟运算计数即可;如果是通过位运算的话,就比较巧妙了。下面是一些基本的位运算,设当前数为x(x为非负整数):

  • x和1与运算:由于1的二进制码如00001,所以x和1进行与运算的结果就是:1(若x为奇数,即x的二进制码最后一位为1),0(若x为偶数,即x的二进制码最后一位为0)
  • x和1异或运算:由于1的二进制码如00001,所以x和1进行抑或运算的结果就是:x-1(若x为奇数,即x的二进制码最后一位为1),x+1(若x为偶数,即x的二进制码最后一位为0)
  • x左移一位:x/2 -1(若x为奇数,即x的二进制码最后一位为1),x/2(若x为偶数,即x的二进制码最后一位为0)
    若x不为0,则x的二进制表示为1abcd...,其中abcd等是1或者0,在将x变成0的过程中,对于每一位而言:如果该位是1,那么需要进行一次抑或运算,将该位变成0,然后进行左移运算;如果该位是0,则直接进行左移运算即可。
    所以我们可以发现对于某个确定的x的二进制表示,我们需要进行的抑或运算m和左移运算的次数n也是确定的。不难发现,其中m就等于该二进制表示中1的个数,而n则等于该二进制表示长度-1(因为若x非0,那么x的二进制表示的第一位总是1,而在对后面的各位进行处理了之后,临时结果只剩下一个1,只需要再进行一次异或运算即可将之变为0)。

Python相关

在Python中,我们有如下几种常见位运算:

  1. x和1与运算,对应于x & 1,等价于x % 2
  2. x和1异或运算,对应于x ^ 1,等价于x - 1(x为奇数)、x + 1(x为偶数)
  3. x左移一位,对应于x >> 1,等价于x // 2

具体实现

基本思路:

class Solution:
    def numberOfSteps (self, num: int) -> int:
        count = 0
        while num:
            if num % 2 == 0:
                num = num // 2
            else:
                num -= 1
            count += 1
        return co

位运算:

class Solution:
    def numberOfSteps(self, num: int) -> int:
        tmp = str(bin(num))[2:]
        return len(tmp) - 1 + tmp.count('1')

参考

  1. 用位运算处理的思路与代码 - 将数字变成 0 的操作次数 - 力扣(LeetCode)

相关文章

  • 『位运算』将数字变成 0 的操作次数1342

    题目相关 原题链接:1342. 将数字变成 0 的操作次数 - 力扣(LeetCode) 涉及知识:位运算 题目难...

  • LeetCode刷题之位运算

    1342. 将数字变成 0 的操作次数 给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前...

  • LeetCode 1342. 将数字变成 0 的操作次数

    题目 给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;...

  • 将数字变成 0 的操作次数

    题目: 太难得了,第一次看题目就明白说的是啥。 题目的理解: 计算一共执行的次数。 python实现 提交 执行代...

  • LeetCode题解之将数字变成 0 的操作次数

    将数字变成 0 的操作次数 题目描述 给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数...

  • 5311. 将数字变成 0 的操作次数

    解法一 就是模拟操作 就是整数的位数 + 里面1的个数 /2 就要移位,所有求位数,注意-1 -1 如果位是1,需...

  • 位运算符

    位取反运算符 取反翻运算符 ~ 是对所有位的数字进行取反操作0 变 11 变 0 位与运算符 位与运算符 & 可以...

  • Swift - 位运算符

    位运算符 取反运算 位取反运算符(~) 是对所有位的数组进行取反 0000 1111 取反操作后变成 1111 0...

  • 位运算

    最近写了几道位运算的题目,顺便复习一下位运算的基本知识。 反码:将二进制的所有值取反,0变成1,1变成0补码:反码...

  • swift-位运算符

    1. 位取反运算符( ~ ) 位取反运算符(~ )是对所有位的数字进行取反操作 2. 位与运算符( &) 位与运算...

网友评论

      本文标题:『位运算』将数字变成 0 的操作次数1342

      本文链接:https://www.haomeiwen.com/subject/ohepuhtx.html