Skip to content

Commit ca63b32

Browse files
committed
leetcode 89
1 parent 2dd83b6 commit ca63b32

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

basic-learning/src/main/java/com/jacobs/basic/algorithm/leetcode/ProblemsMedium_11.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package com.jacobs.basic.algorithm.leetcode;
22

3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
37
/**
48
* @author lichao
59
* Created on 2019-06-22
@@ -170,4 +174,34 @@ public int removeDuplicates2(int[] nums) {
170174
nums[i++] = n;
171175
return i;
172176
}
177+
178+
/**
179+
* leetcode 89
180+
*
181+
* 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。
182+
* 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。
183+
*
184+
* 输入: 2
185+
* 输出: [0,1,3,2]
186+
* 解释:
187+
* 00 - 0
188+
* 01 - 1
189+
* 11 - 3
190+
* 10 - 2
191+
* @param n
192+
* @return
193+
*/
194+
public List<Integer> grayCode(int n) {
195+
if (n == 0) {
196+
return Arrays.asList(0);
197+
}
198+
List<Integer> prev = grayCode(n - 1);
199+
List<Integer> next = new ArrayList<Integer>(prev);
200+
int pow = 1 << (n - 1);
201+
for (int i = prev.size() - 1; i >= 0; i--) {
202+
// 对前面得到的每一项在高位加上1,生成新的一项
203+
next.add(prev.get(i) | pow);
204+
}
205+
return next;
206+
}
173207
}

0 commit comments

Comments
 (0)