设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); } }