/**89. Gray Code
* @param n
* @return
*/
public List<Integer>
grayCode(
int n) {
List<Integer> list =
new ArrayList<Integer>();
int count = (
int) Math.pow(
2,n);
int[] nums =
new int[n];
if (n ==
0) {
list.add(
0);
return list;
}
for (
int i =
0; i < count; i++) {
int j = i;
int k = n-
1;
while(j >
0) {
nums[k--] = j%
2;
j = j/
2;
}
int val =
0;
j =
1;
for(k = n-
1; k >
0; k--) {
nums[k] = nums[k]^nums[k-
1];
val += nums[k]*j;
j = j*
2;
}
val += nums[
0]*j;
list.add(val);
}
return list;
}
//n=0时输出[0]
改进:利用格雷码性质
public List<Integer>
grayCode1(
int n) {
List<Integer> gray =
new ArrayList<Integer>();
for(
int i =
0 ; i <
1<<n ; i++) {
int temp = i>>
1;
gray.add(i^temp);
}
return gray;
}
转载请注明原文地址: https://ju.6miu.com/read-9981.html