LeetCode位運算合集
阿新 • • 發佈:2019-01-09
位運算相關知識點
- & 與
兩位都為1,否則為0 - | 或
一位為1,就為1,否則為0 - ^ 異或
相同為0,不同為1 - ~ 非
1 為 0, 0 為 1
344. Reverse String
Write a function that takes a string as input and returns the string reversed.
Example:
Given s = “hello”, return “olleh”.
最簡單的做法
new StringBuilder(s).reverse().toString();
更高效的做法
public String reverseString(String s) {
char[] array = s.toCharArray();
for(int i = 0, j = array.length - 1; i < j; i++, j--){
char tmp = (char) (array[i] ^ array[j]);
array[j] = (char) (tmp ^ array[j]);
array[i] = (char) (tmp ^ array[i]);
}
return new String(array );
}
例如:
0010 ^ 0101 = 0111;
0010 ^ 0111 = 0101;
0101 ^ 0111 = 0010;
這樣就完成了兩個數的調換,使用位運算更加高效
190. Reverse Bits
題目:給定一個32位int型數,反轉其二進位制數
例如:
12的二進位制為:0000 0000 0000 0000 0000 0000 0000 1100
反轉二進位制位:1100 0000 0000 0000 0000 0000 0000 0000 (805306368)
思路:首先定義一個result為0,一步步得取出12中二進位制的最後一位,與result相加,並將result左移一位
程式碼:
public int reverseBits(int n) {
if (n == 0){
return n;
}
int result = 0;
for(int i = 0; i < 32; i++){
result <<= 1;
result += n & 1;
n >>= 1;
}
return result;
}
136. Single Number
Given an array of integers, every element appears twice except for one. Find that single one.
給定整數陣列,除了一個元素之外,每個元素都會出現兩次。 找到那個單一的。
解析:
N1 ^ N1 ^ N2 ^ N2 ^ N3 = N3
public class Solution {
public int singleNumber(int[] nums) {
int res = 0;
for (int i : nums) {
res ^= i;
}
return res;
}
}