leetcode-476- Number Complement
2017-01-13 15:10
337 查看
问题
题目:[leetcode-476]思路
朴素的思路没什么好说的。转化成位向量的形式去做。代码(位向量)
class Solution { public: int findComplement(int num) { int bit[32]; std::memset( bit, 0, sizeof(bit) ); int idx = 0; while( num ){ bit[idx++] = (num%2)?0:1; num >>= 1; } int ret = 0; for( int i = 0, base = 1; i < idx; ++i, base*= 2 ){ ret += bit[i]*base; } return ret; } };
思路
利用mask把每一位取出来,然后用或运算还原回去。这个题有一个注意点,就是mask。当num = INT_MAX的时候,mask再向左移动一位,就会出问题。如果mask有符号数。那么则会上溢,变成负数最小的。因为是高位权0x80000000。判断负数跳出即可,或者写成无符号数也可以。代码
class Solution { public: int findComplement(int num) { int mask = 1; int ans = 0; while( mask > 0 && mask <= num ){ int t = mask & num; if(!t) ans |= mask; mask <<= 1; } return ans; } };
相关文章推荐
- LeetCode- 476 Number Complement(easy)
- leetcode 476 Number Complement
- leetcode 476 Number Complement C++
- 【LeetCode】476 Number Complement
- LeetCode-476 Number Complement
- LeetCode 476 Number Complement 补数
- 刷题的日常[Leetcode]——461)Hamming Distance and 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: Number Complement
- leetcode Number Complement
- LeetCode---Number Complement
- 476. Number Complement
- LeetCode之Number Complement
- LeetCode Number Complement
- 476. Number Complement