首页 > 代码库 > [leetcode]Gray Code
[leetcode]Gray Code
Gray Code
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 - 001 - 111 - 310 - 2Note:
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.
这道题木有思路主要是因为不了解什么叫格雷码。
算法思路:
思路1:
格雷码公式法:gray = (binary) xor (binary >> 1)
代码
1 public class Solution {2 public List<Integer> grayCode(int n) {3 int size = 1 << n;4 List<Integer> list = new ArrayList<Integer>();5 for(int i = 0; i < size; list.add(i ^ i >> 1),i++);6 return list;7 }8 }
思路2:
不知道公式也没关系,只要弄明白格雷码的定义就好了,递归实现法也不难
代码如下:
1 public class Solution { 2 public List<Integer> grayCode(int n) { 3 if(n == 0){ 4 List<Integer> list = new ArrayList<Integer>(); 5 list.add(0); 6 return list; 7 } 8 List<Integer> list = new ArrayList<Integer>(); 9 List<Integer> l = grayCode(n - 1); 10 list.addAll(l);11 for(int i = l.size() - 1; i >= 0 ;i--){12 list.add(l.get(i) +(1 << (n - 1)));13 }14 return list;15 }16 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。