LeetCode-476. Number Complement
来源:互联网 发布:算法问题实战策略pdf 编辑:程序博客网 时间:2024/06/05 22:39
题目链接:476. Number Complement
题目描述:给你一个正整数,求这个正整数的二进数的值,全部取反后的整数的值。
- 这个正整数是一个小于32位的整数
- 你可以认为这个二进制数没有前导0,也就是说二进制数的第一位一定是1
这道题就没啥说的了,将给的正整数转化为二进制数,取反后再转化为整数,返回结果就ok。
我的代码(很渣):
class Solution(object): def findComplement(self, num): f = [] for l in list(bin(num).replace("0b", "")): if l == '1': f.append('0') else: f.append('1') return int(''.join(f), 2)
这里再介绍一种很简洁的办法。
我大致讲解一下思路:
- 当i<=num时,i左移一位
- 用i-1的值与num异或去的结果
举例:
假设num=5(二进制:101)
当i=1(二进制:1)时,i<=num,此时i左移一位,i=2
当i=2(二进制:10)时,i<=num, i继续左移一位, i=4
当i=4(二进数:100)时,i<=num, i继续左移一位,i=8
当i=8(二进制数:1000)时,i>num, 此时i-1,即7(二进制:111)
此时7(111)与5(101)异或,结果为2(010)
所以最终的结果是2
class Solution(object): def findComplement(self, num): i = 1 while i <= num: i = i << 1 return (i - 1) ^ num
这道题的做法多种多样,但我觉得能过使用位运算来做出结果是一个非常好的方式。
推荐大家在做题的时候可以多想想怎么使用位运算来解决问题。
以上。
阅读全文
0 0
- LeetCode 476. Number Complement
- leetcode 476. Number Complement
- 【Leetcode】476. Number Complement
- 【Leetcode】476. Number Complement
- LeetCode 476. Number Complement
- LeetCode 476. Number Complement
- LeetCode--476. Number Complement
- LeetCode 476. Number Complement
- 476. Number Complement [LeetCode]
- [LeetCode]476.Number Complement
- 【LeetCode】 476. Number Complement
- LeetCode 476. Number Complement
- LeetCode 476. Number Complement
- 【LeetCode】476. Number Complement
- leetcode 476. Number Complement
- [LeetCode]476. Number Complement
- LeetCode 476. Number Complement
- 【LeetCode】476. Number Complement
- 电脑开wifi热点
- 数据库清理
- JeDate
- CPUID指令
- 盒子模型及box-sizing的理解;
- LeetCode-476. Number Complement
- PHP基础知识点总结
- 面向对象编程和简单UI界面的实现
- 微信小程序开发经验总结(二)
- 页面预加载与点击时间走的同一个方法,且携带String的转换时间类型写法
- Lifecycle-aware Components google官方生命周期组件
- Use JsonReader.setLenient(true) to accept malformed JSON at line 10 column 2
- 计算出一字符串(字符串中每个单词之间有一个或多个空格)中每个单词的 出现的次数
- asp.net VS2013自带的数据库SQL Server Express LocalDB使用介绍