leetcode 476. Number Complement | 476. 数字的补数(位运算)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 476. Number Complement | 476. 数字的补数(位运算)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
https://leetcode.com/problems/number-complement/
題解
class Solution {public int findComplement(int num) {int i = Integer.numberOfLeadingZeros(num);return ~num << i >> i;} }
也可以參考評論區的答案:
Idea:
- Flip all bits using negation operator (~) [read more here]
- Logical AND (&) with a bit a mask of size n whose all bits are set, where n = number of bits in num
Example:
T/S: O(1)/O(1)
public int findComplement(int num) {var nBits = (int) Math.floor((Math.log(num) / Math.log(2)) + 1);var mask = (1 << nBits) - 1;return ~num & mask; }1 liner variation of above method
public int findComplement(int num) {return ~num & (Integer.highestOneBit(num) - 1); }總結
以上是生活随笔為你收集整理的leetcode 476. Number Complement | 476. 数字的补数(位运算)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode 312. Burst
- 下一篇: leetcode 802. Find E