您的位置:首页 > 其它

leetcode Gray Code

2016-07-06 22:25 351 查看
第一次接触格雷码,同样是一脸懵逼,看了很多解释,发现其实还是很简单的,首先看一下定义:在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray
Code)。

举个例子:2位格雷码:
00
01
11
10
再举个例子,3位格雷码:
000
001
011
010
110
111
101
100
是否已经发现规律了呢~反正我当时是没发现,但是现在看来非常显而易见,我们将8组数分为上下两部分,可以看到,去掉第一位,剩下的三位是完全对称的,那么题目就很简单了,我们可以根据递归,得到(n-1)位的格雷码,然后一半加前缀0,一半加前缀1,就得到了n位格雷码,代码如下:
public class Solution {

    List<Integer> list=new ArrayList<>();

    public List<Integer> grayCode(int n) {

        if(n==0){

            list.add(0);

            return list;

        }

        List<Integer> sublist=grayCode(n-1);

        int mark=1<<(n-1);

        for(int i=sublist.size()-1;i>=0;i--)

        {

            list.add(mark+sublist.get(i));

        }

        return list;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode