[LeetCode]89. 格雷编码(java实现)递归+定义
1. 题目
2. 读题(需要重点注意的东西)
思路(递归):
第1位的格雷编码为:0,1
…
第n位的格雷编码是由上一位n-1的格雷编码按如下方式得到的,以求第2位的格雷编码为例:
-
将第n-1位的编码进行如下轴对称:
-
将轴对称以上补0,轴对称以下补1,得到第n位的格雷编码为:
00,10,11,01
如何实现前一半最后一位补0,后一半最后一位补1?
观察得到,补0相当于左移了一位,则将前一半元素全部左移一位,后一半元素全部左移一位再加1就实现了前一半最后一位补0,后一半最后一位补1
3. 解法
---------------------------------------------------解法---------------------------------------------------
class Solution {
public List<Integer> grayCode(int n) {
List<Integer> res = new ArrayList<>();
res.add(0);
res.add(1);
while(--n > 0){
for(int i = res.size() - 1;i >= 0;i--){
res.set(i,res.get(i) << 1);
res.add(res.get(i) + 1);
}
}
return res;
}
}
可能存在的问题: