算法思想
注意:对于给定的 n,其格雷编码顺序并不唯一。根据以上定义, [0,2,3,1] 也是一个有效的格雷编码顺序。
这个题有个小技巧,关于格雷码的编码规律,通过观察可得到,
当 n=0 编码为{0}
当 n=1 编码为{0,1}
当 n=2 编码为{0,01,11,10}
当 n=3 编码为{000,001,011,010,100,101,111,110}
可以看出,当n>=1时,n的格雷编码为第n-1的格雷编码,在多个1,如n=3的格雷码比n=2的格雷码多了四个,而那四个格雷码多了一个移位的1。
/*
* 题目:格雷编码
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。
给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。
格雷编码序列必须以 0 开头*/
public class geLeiBianMa {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("请输入n:");
int n;
n= sc.nextInt();
LinkedList<Integer> list = new LinkedList<>(){{add(0);}};
int head=1;
for (int i = 0; i < n; i++) {
for (int j = list.size()-1; j >=0 ; j--) {
list.add(head+list.get(j));
}
head<<=1;//移位
}
for (Integer x: list) {
System.out.println("gelei:"+x);
}
}
}