格雷編碼
題目描述:格雷編碼是一個二進位制數字系統,在該系統中,兩個連續的數值僅有一個位數的差異。
給定一個代表編碼總位數的非負整數 n,列印其格雷編碼序列。即使有多個不同答案,你也只需要返回其中一種。
格雷編碼序列必須以 0 開頭。
示例說明請見LeetCode官網。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解法一:二進位制運算
找規律:為n的格雷碼的總數,即為n-1的所有格雷碼加上n-1的所有格雷碼前面加1。所以可以根據這個規律求解。
import java.util.ArrayList;
import java.util.List;
public class LeetCode_089 {
public static List<Integer> grayCode(int n) {
List<Integer> result = new ArrayList<>();
result.add(0);
int head = 1;
for (int i = 0; i < n; i++) {
for (int j = result.size() - 1; j >= 0; j--) {
result.add(head + result.get(j));
}
head <<= 1;
}
return result;
}
public static void main(String[] args) {
for (Integer s : grayCode(2)) {
System.out.println(s);
}
}
}
【每日寄語】 一個人的深切期望不但可以創造自己的機會,甚至可以創造自己的天才!