【leetcode】【89】Gray Code

原创 2015年11月17日 16:43:15

一、问题描述

The gray code is a binary numeral system where two successive values differ in only one bit.

Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.

For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:

00 - 0
01 - 1
11 - 3
10 - 2

Note:
For a given n, a gray code sequence is not uniquely defined.

For example, [0,2,3,1] is also a valid gray code sequence according to the above definition.

For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.

二、问题分析

通过观察我们可以可以发现,

当n=1时,gray code 为 0,1;

当n=2时,gray code 为 00,01,11,10

当n=3时,gray code 为 000,001,011,010,110,111,101,100

我们可以发现,比如n=3时 黑色的部分即为n=2时的全部,而红色部分是首位为1,余下的两位为n=2时的逆序组合(例如,n=2时最后一个为10,而n=3时的红色部分为110,n=2时的倒数第二个为11,n=3时的红色部分的第二个为111,以此类推)

我们可以采用递归和迭代两种方式

题目的tags表明该题可以采用backtracking,但写起来并不太容易

三、Java AC 代码

迭代

public List<Integer> grayCode(int n) {
        ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(0);
		for (int i = 0; i < n; i++) {
			int highest = 1 << i;
			for(int j = list.size()-1;j>=0;j--){
				list.add(list.get(j)+highest);
			}
		}
		return list;
    }


递归

public List<Integer> grayCode(int n) {
        if (n==0) {
			List<Integer> list = new ArrayList<Integer>();
			list.add(0);
			return list;
		}
		List<Integer> list = grayCode(n-1);
		int highest = 1 << (n-1);
		for (int i = list.size()-1; i >= 0; i--) {
			list.add(list.get(i)+highest);
		}
		return list;
    }


LeetCode89:Gray Code

The gray code is a binary numeral system where two successive values differ in only one bit.Given a ...
  • u012501459
  • u012501459
  • 2015年07月07日 15:59
  • 1034

Leetcode #89 Gray Code

The gray code is a binary numeral system where two successive values differ in only one bit. Give...
  • u011472124
  • u011472124
  • 2015年08月03日 18:51
  • 119

leetcode 89 Gray Code

leetcode 89 Gray Code Python C++
  • sxingming
  • sxingming
  • 2016年06月27日 10:53
  • 270

leetcode——89——Gray Code

The gray code is a binary numeral system where two successive values differ in only one bit. Given ...
  • happyxuma1991
  • happyxuma1991
  • 2016年04月19日 21:51
  • 121

leetcode 89 Gray Code

The gray code is a binary numeral system where two successive values differ in only one bit. Given a...
  • u012614906
  • u012614906
  • 2016年09月28日 17:14
  • 864

leetcode || 89、Gray Code

problem: The gray code is a binary numeral system where two successive values differ in...
  • hustyangju
  • hustyangju
  • 2015年04月14日 21:12
  • 566

leetcode #89 Gray Code

题目:生成格雷码。即下一个数和上一个数比只有一个位不同。 分析:格雷码的特点,是n位格雷码和是的前一半是n-1位格雷码前面+0,后一半是n-1为格雷码倒序且前面+1 0 0 0 0 0 1 0...
  • MarStarck
  • MarStarck
  • 2015年09月27日 22:54
  • 180

Gray Code(Leetcode 89)

The gray code is a binary numeral system where two successive values differ in only one bit. Give...
  • peihaozhu
  • peihaozhu
  • 2015年11月30日 11:42
  • 360

[leetcode] #89 Gray Code

题目 The gray code is a binary numeral system where two successive values differ in only one bit. ...
  • wujianhenhao
  • wujianhenhao
  • 2015年05月18日 15:49
  • 558

[leetcode 89] Gray Code

The gray code is a binary numeral system where two successive values differ in only one bit. Give...
  • xinxinxv
  • xinxinxv
  • 2015年01月02日 12:41
  • 101
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【leetcode】【89】Gray Code
举报原因:
原因补充:

(最多只允许输入30个字)