1. 程式人生 > 其它 >89. 格雷編碼

89. 格雷編碼

設n階格雷碼集合為 G(n),則 G(n+1) 階格雷碼為:
  1.給 G(n)階格雷碼每個元素二進位制形式前面新增0,得到 G'(n)
  2.設 G(n)集合倒序(映象)為 R(n),給 R(n)每個元素二進位制形式前面新增 1,得到 R'(n)
  3.G(n+1)=G'(n)∪R'(n)拼接兩個集合即可得到下一階格雷碼

package leetcode;

import java.util.ArrayList;
import java.util.List;

public class demo_89 {
    public List<Integer> grayCode(int
n) { List<Integer> list=new ArrayList<Integer>(); list.add(0); int init=1; for(int i=0;i<n;i++) { for(int j=list.size()-1;j>=0;j--) { //由於最高位前預設為0,因此G'(n) = G(n),只需在即G(n)後新增 R'(n)即可 list.add(list.get(j)+init); }
//執行init= 1 << i 計算出對應位數,以給 R(n)R(n) 前新增 11 得到對應 R'(n)R init=init<<1; } System.out.println(list); return list; } public static void main(String[] args) { // TODO Auto-generated method stub demo_89 d89 =new demo_89(); d89.grayCode(
2); } }