您的位置:首页 > 其它

LeetCode:Gray Code

2013-09-15 21:52 239 查看
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.

起初我把这道题想复杂了,我提交了一个简单的暴力查找的算法,过了。

package leetcode;

import java.util.ArrayList;
import java.util.Arrays;

public class GrayCode {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GrayCode c = new GrayCode();
		System.out.println(c.grayCode(3));

	}
	
	public ArrayList<Integer> grayCode(int n) {
		ArrayList<Integer> result = new ArrayList<Integer>();
		
		char[] temp = new char
;
		Arrays.fill(temp, '0');
		
		boolean[] flag = new boolean[(int)Math.pow(2, n)];
		Arrays.fill(flag, false);
		
		
		result.add(toInt(temp, n));
		flag[0] = true;
		
		boolean f = true;
		while (f) {
			f = false;
			for (int i = 0; i < n; i++) {
				char old = temp[i];
				if (old == '1') {
					temp[i] = '0';
				} else {
					temp[i] = '1';
				}

				int r = toInt(temp, n);

				if (flag[r]) {
					temp[i] = old;
				} else {
					result.add(r);
					flag[r] = true;
					f = true;
					break;
				}
			}
		}
		
		
		
		return result;

	}
	
	private int toInt(char[] c, int n) {
		int r = 0;
		int i = 0;
		int t = 1;
		while (i < n) {
			if (c[i] == '1') {
				r += t;
			}
			
			i++;
			t *= 2;
		}
		return r;
	}

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