您的位置:首页
leetCode 89.Gray Code (格雷码) 解题思路和方法
2017-05-26 21:40
543 查看
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
code sequence is:
Note:
For a given n, a gray code sequence is not uniquely defined.
For example,
above definition.
For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.
此题不算难,主要是要掌握什么是格雷码。然后才干做这道题,详细格雷码概念參考百度就可以,详细解法是遍历,逐一试探就可以。
代码例如以下:
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.
此题不算难,主要是要掌握什么是格雷码。然后才干做这道题,详细格雷码概念參考百度就可以,详细解法是遍历,逐一试探就可以。
代码例如以下:
public class Solution { public List<Integer> grayCode(int n) { List<Integer> list = new ArrayList<Integer>(); //去除反复 Set<String> set = new HashSet<String>(); //表示二进制数的数组 char[] c = new char ; Arrays.fill(c, '0');//所有为0 set.add(new String(c)); list.add(0); int i = 1;//从1開始 //格雷码长度 int len = (int) Math.pow(2, n); while(i++ < len){ //逐个尝试 for(int j = c.length - 1; j >= 0; j--){ c[j] = c[j] == '1' ? '0':'1';//每一位均异或 String b = new String(c); //成功则加入结果集。并结束循环 if(set.add(b)){ //二进制转换为十进制 list.add(Integer.valueOf(b, 2)); break; }else{ //假设不是则数值变换回来 c[j] = c[j] == '1' ? '0':'1'; } } } return list; } }
相关文章推荐
- leetCode 89.Gray Code (格雷码) 解题思路和方法
- Leetcode 89. Gray Code 格雷码 解题报告
- leetCode 6. ZigZag Conversion(Z形变换) 解题思路及方法
- leetCode 11.Container With Most Water (数轴上容器) 解题思路和方法
- leetCode 23. Merge k Sorted Lists (合并k个排序链表) 解题思路和方法
- leetCode 31.Next Permutation (下一个字典序排序) 解题思路和方法
- leetCode 27.Remove Element (删除元素) 解题思路和方法
- leetCode 7. Reverse Integer (数字反转) 解题思路与方法
- leetCode 18.4Sum (4数字和) 解题思路和方法
- leetCode 24. Swap Nodes in Pairs (双数交换节点) 解题思路和方法
- leetCode 20.Valid Parentheses (有效的括号) 解题思路和方法
- leetCode 30.Substring with Concatenation of All Words (words中所有子串相连) 解题思路和方法
- leetCode 13.Roman to Integer (罗马数字转整形) 解题思路和方法
- leetCode 25.Reverse Nodes in k-Group (以k个节点为一组反转链表) 解题思路和方法
- leetCode 4. Median of Two Sorted Arrays 解题思路和方法
- leetcode 10.Regular Expression Matching(正则表达式匹配) 解题思路和方法
- leetCode 15. 3Sum (3数之和) 解题思路和方法
- leetcode 之 Gray Code 解题思路
- leetCode 28.Implement strStr() (实现字符串匹配函数) 解题思路和方法
- leetCode 26.Remove Duplicates from Sorted Array(删除数组重复点) 解题思路和方法