LeetCode-089-格雷編碼

雄獅虎豹發表於2022-03-26

格雷編碼

題目描述:格雷編碼是一個二進位制數字系統,在該系統中,兩個連續的數值僅有一個位數的差異。

給定一個代表編碼總位數的非負整數 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);
        }
    }
}
【每日寄語】 一個人的深切期望不但可以創造自己的機會,甚至可以創造自己的天才!

相關文章