思路:手动写了3位和4位的格雷码,发现了规律,3位格雷码变成4位的,原3位的不动,前面加0,然后逆向原3位的,前面加1即可。
public class Solution {
public List<Integer> grayCode(int n) {
List<Integer> ans=new ArrayList<Integer>();
List<String> list=new ArrayList<String>();
if (n==0) {
ans.add(0);
return ans;
}
list.add("0");
list.add("1");
for (int i = 1; i < n; i++) {
List<String> newList=new ArrayList<String>();
for (int j = 0; j < list.size(); j++) {
newList.add("0"+list.get(j));
}
for (int j = list.size()-1; j >= 0 ; j--) {
newList.add("1"+list.get(j));
}
list=newList;
}
for (int i = 0; i < list.size(); i++) {
ans.add(Integer.valueOf(list.get(i), 2));
}
return ans;
}
}
本文介绍了一种递归生成任意位数格雷码的方法。通过手动编写3位和4位格雷码,发现规律并利用该规律实现了算法。具体步骤为先生成1位格雷码,之后每增加一位,都在现有码前加上0,并将当前序列反转后在每个元素前加上1,最终形成新的格雷码序列。
225

被折叠的 条评论
为什么被折叠?



