LeetCode 476. Number Complement
2017-01-16 13:08
232 查看
476. Number Complement
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
Note:
The given integer is guaranteed to fit within the range of a 32-bit signed integer.
You could assume no leading zero bit in the integer’s binary representation
给了一个32位的int型数,要求得到他的无前导0的二进制表示下的补码
说真的这样的题目颇有ICS lab的风范,各种只能用位运算解题什么的QAQ
幸运的是这道题目不要求只能用位运算,所以就有了行数多一些的好想一些的解法啦
我们可以看到,我的思路还是很质朴的。先求出最高位的0在哪里(这里我用了一个朴素的循环),然后找到了最高位的0之后得到了一串只有所有低位有1的掩码mask,然后用mask-num就像是对num的低位取反高位不变,就能得到结果啦
上面有两种算法。我先用的是mask3这样的算法,跑了时间是3ms。看到有人是0ms的就想着优化一下,于是有了mask2那样求掩码的方法,结果变成了6ms!!天知道为什么的情况下我辗转反侧各种对比研究,最后发现两种应该都是3ms。至于我为什么刷出了6ms的解鬼知道23333
476. Number Complement
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
Note:
The given integer is guaranteed to fit within the range of a 32-bit signed integer.
You could assume no leading zero bit in the integer’s binary representation
给了一个32位的int型数,要求得到他的无前导0的二进制表示下的补码
说真的这样的题目颇有ICS lab的风范,各种只能用位运算解题什么的QAQ
幸运的是这道题目不要求只能用位运算,所以就有了行数多一些的好想一些的解法啦
class Solution { public: int findComplement(int num) { unsigned int mask1=1<<31; while ((mask1&num)==0) mask1>>=1; //mask1 shows the highest bit of 1 //mask2==mask3 shows a number with 1's from mask to lowbit unsigned int mask3=(mask1<<1)-1; //another version //unsigned int mask2=0; //while (mask1!=0) //{ // mask2+=mask1; // mask1>>=1; //} return mask3-num; } };
我们可以看到,我的思路还是很质朴的。先求出最高位的0在哪里(这里我用了一个朴素的循环),然后找到了最高位的0之后得到了一串只有所有低位有1的掩码mask,然后用mask-num就像是对num的低位取反高位不变,就能得到结果啦
上面有两种算法。我先用的是mask3这样的算法,跑了时间是3ms。看到有人是0ms的就想着优化一下,于是有了mask2那样求掩码的方法,结果变成了6ms!!天知道为什么的情况下我辗转反侧各种对比研究,最后发现两种应该都是3ms。至于我为什么刷出了6ms的解鬼知道23333
相关文章推荐
- LeetCode 476. Number Complement (数的补数)
- leetcode_476. Number Complement
- 【LeetCode】476. Number Complement (java实现)
- leetcode476. Number Complement
- 【跟Leon一起刷LeetCode】476. Number Complement
- [Leetcode] 476. Number Complement 解题报告
- 【LeetCode】476. Number Complement【E】【59】
- LeetCode——476. Number Complement(二进制,C++)
- 【LeetCode】476. Number Complement (java实现)
- 【LeetCode】476. Number Complement (java实现)
- leetcode 476 Number Complement
- 【LeetCode】476 Number Complement
- LeetCode Number Complement
- 476. Number Complement
- [LeetCode] Number Complement 补数
- LeetCode - Number Complement
- [LeetCode]Number Complement - Python
- LeetCode题解: Number Complement
- LeetCode- 476 Number Complement(easy)
- Leetcode-Algorithms Number Complement(数字补码)