题干:
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。
给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。
示例 1:
输入: 2 输出:[0,1,3,2]
解释: 00 - 0 01 - 1 11 - 3 10 - 2 对于给定的 n,其格雷编码序列并不唯一。 例如,[0,2,3,1]
也是一个有效的格雷编码序列。 00 - 0 10 - 2 11 - 3 01 - 1
示例 2:
输入: 0 输出:[0] 解释: 我们定义
格雷编码序列必须以 0 开头。给定
编码总位数为n 的格雷编码序列,其长度为 2n
。当 n = 0 时,长度为 20 = 1。 因此,当 n = 0 时,其格雷编码序列为 [0]。
(假设以二进制为0的值做为格雷码的0)
G:格雷码 B:二进制码 n:正在计算的位
根据格雷码的定义可得:
G(n) = B(n+1) XOR B(n)
代码为:
package LeetCode89;
import java.util.ArrayList;
import java.util.List;
/**
* \* Project: LeetCode
* \* Package: Solution
* \* User: Hoodie_Willi
* \* Date: 2019-05-29 16:17:19
* \* Description:
* \
*/
public class Solution {
public List<Integer> grayCode(int n) {
List<Integer> list =new ArrayList<Integer>();
for(int i=0;i<Math.pow(2,n);i++){
int j = i>> 1;
list.add(i ^ (j));
}
return list;
}
public static void main(String[] args) {
System.out.println(new Solution().grayCode(3));
}
}