/**
*
* @author gentleKay
* The gray code is a binary numeral system where two successive values differ in only one bit.
* Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.
* For example, given n = 2, return[0,1,3,2]. Its gray code sequence is:
* 00 - 0
01 - 1
11 - 3
10 - 2
* Note:
* For a given n, a gray code sequence is not uniquely defined.
* For example,[0,2,3,1]is also a valid gray code sequence according to the above definition.
* For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.
*
* 灰色代码是一个二进制数字系统,其中两个连续值仅在一个位上不同。
* 给定一个非负整数n,表示代码中的位总数,打印灰色代码的序列。灰色代码序列必须以0开头。
* 例如,给定n=2,返回[0,1,3,2]。其灰色代码序列为:
* 00 - 0
01 - 1
11 - 3
10 - 2
* 注:
* 对于给定的n,灰色代码序列不是唯一定义的。
* 例如,根据上述定义,[0,2,3,1]也是有效的灰色代码序列。
* 目前,法官能够根据一个灰色编码序列的实例进行判断。很抱歉。
*/
这道题如果你知道格雷码和移位运算符,那解决起来很简单。
格雷码:https://baike.baidu.com/item/%E6%A0%BC%E9%9B%B7%E7%A0%81
移位运算符:https://www.cnblogs.com/winsker/p/6728672.html
import java.util.ArrayList; /** * * @author gentleKay * The gray code is a binary numeral system where two successive values differ in only one bit. * Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0. * For example, given n = 2, return[0,1,3,2]. Its gray code sequence is: * 00 - 0 01 - 1 11 - 3 10 - 2 * Note: * For a given n, a gray code sequence is not uniquely defined. * For example,[0,2,3,1]is also a valid gray code sequence according to the above definition. * For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that. * * 灰色代码是一个二进制数字系统,其中两个连续值仅在一个位上不同。 * 给定一个非负整数n,表示代码中的位总数,打印灰色代码的序列。灰色代码序列必须以0开头。 * 例如,给定n=2,返回[0,1,3,2]。其灰色代码序列为: * 00 - 0 01 - 1 11 - 3 10 - 2 * 注: * 对于给定的n,灰色代码序列不是唯一定义的。 * 例如,根据上述定义,[0,2,3,1]也是有效的灰色代码序列。 * 目前,法官能够根据一个灰色编码序列的实例进行判断。很抱歉。 */ public class Main23 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(Main23.grayCode(2)); } public static ArrayList<Integer> grayCode(int n) { ArrayList<Integer> array = new ArrayList<>(); int num = 1 << n; for (int i=0;i<num ;i++) { array.add(i >> 1^i); //格雷码,十进制转二进制 和 >> 运算优先级高于 ^ } return array; } }