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个0/1排列组合,涉及到排列组合,通常可以先考虑回溯法。

设ret表示返回的数字列表,ret初始为[0,],有两种思路:

1、循环遍历ret列表n次,每次对ret中每一个元素使用"<<"左移运算,并将左移运算后的结果加1,加入列表当中;

  即{0}->{0, 1}->{00, 10, 01, 11}->{000, 100, 010, 110, 101, 011, 111}->...

  即{0}->{0, 1}->{0, 2, 1, 3}->{0, 4, 2, 6, 1, 5, 3, 7} ...

2、取出ret中已有元素的值,并将其增加,将新值插入ret中,循环n次:

  {0}           取出每个元素加入1,并将结果加入列表     ->{0, 1}                ->{0, 1}

  {0, 1}       取出每个元素加入10,并将结果加入列表    ->{0, 1, 10, 11}            ->{0, 1, 2, 3}

  {10, 11}   取出每个元素加入100,并将结果加入列表   ->{0, 1, 10, 11, 100, 101, 110, 111} ->{0, 1, 2, 3, 4, 5, 6, 7}

但是这个该死的题目要求必须要按照Leetcode给定的顺序排列数字,就是必须{0, 1, 3, 2};

因此只能使用第二种方法,并且倒序取出已有元素;

代码:

 class Solution {
public:
vector<int> grayCode(int n) {
vector<int> result(, );
int inc = ; while (n--) {
int s = result.size();
for (int j = s - ; j >= ; --j)
result.push_back(result[j] + inc);
inc <<= ;
} return result;
}
};

【Leetcode】【Medium】Gray Code的更多相关文章

  1. 【LeetCode题意分析&解答】40. Combination Sum II

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...

  2. 【LeetCode题意分析&解答】37. Sudoku Solver

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  3. 【LeetCode题意分析&解答】35. Search Insert Position

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  4. ACM金牌选手整理的【LeetCode刷题顺序】

    算法和数据结构知识点图 首先,了解算法和数据结构有哪些知识点,在后面的学习中有 大局观,对学习和刷题十分有帮助. 下面是我花了一天时间花的算法和数据结构的知识结构,大家可以看看. 后面是为大家 精心挑 ...

  5. 【LeetCode算法题库】Day7:Remove Nth Node From End of List & Valid Parentheses & Merge Two Lists

    [Q19] Given a linked list, remove the n-th node from the end of list and return its head. Example: G ...

  6. 【LeetCode算法题库】Day4:Regular Expression Matching & Container With Most Water & Integer to Roman

    [Q10] Given an input string (s) and a pattern (p), implement regular expression matching with suppor ...

  7. 【LeetCode算法题库】Day3:Reverse Integer & String to Integer (atoi) & Palindrome Number

    [Q7]  把数倒过来 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Outpu ...

  8. 【LeetCode算法题库】Day1:TwoSums & Add Two Numbers & Longest Substring Without Repeating Characters

    [Q1] Given an array of integers, return indices of the two numbers such that they add up to a specif ...

  9. 【LeetCode算法题库】Day5:Roman to Integer & Longest Common Prefix & 3Sum

    [Q13] Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Valu ...

  10. 【LeetCode算法题库】Day2:Median of Two Sorted Arrays & Longest Palindromic Substring & ZigZag Conversion

    [Q4] There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of th ...

随机推荐

  1. ifconfig command not found

    CentOS minimal 命令做了修改 可以运行 ip addr

  2. Java - 二分法查找(尚学堂第七章数组)

    import java.util.Arrays; public class TestBinarySearch { public static void main(String[] args) { in ...

  3. DP Intro - poj 1947 Rebuilding Roads

    算法: dp[i][j]表示以i为根的子树要变成有j个节点的状态需要减掉的边数. 考虑状态转移的时候不考虑i的父亲节点,就当不存在.最后统计最少减去边数的 时候+1. 考虑一个节点时,有两种选择,要么 ...

  4. Java学习之路(二):关键字和变量,运算符

    关于关键字的一个概述 Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构,关键字不能用做变量名.方法名.类名.包名. Java常见的关键字 标识符 什么是标识 ...

  5. 判断弹出框存在(alert_is_ present)

    系统弹窗这个是很常见的场景,有时候它不弹出来去操作的话,会抛异常.那么又不知道它啥时候会出来,那么久需要去判断弹窗是否弹出了 判断 alert 源码分析 class alert_is_present( ...

  6. Ubuntu下伪分布式模式Hadoop的安装及配置

    1.Hadoop运行模式Hadoop有三种运行模式,分别如下:单机(非分布式)模式伪分布式(用不同进程模仿分布式运行中的各类节点)模式完全分布式模式注:前两种可以在单机运行,最后一种用于真实的集群环境 ...

  7. Python基础(6) - 基本语句

    Python print(在Python 3.0中就变成了函数了) print语句是把对象用文本化的形式输出到标准的输出流上. Operation  Interpretation print spam ...

  8. Scrum 冲刺博客第一篇

    一.各个成员在 Alpha 阶段认领的任务 成员 Alpha 阶段认领的任务 黄腾龙 主要功能模块代码开发 叶城龙 部分模块代码开发,博客撰写 李心宇 代码测试,博客撰写 余腾鑫 界面设计,博客撰写 ...

  9. js confirm实现换行

    js中confirm或者alert不识别标签,所以要换行的话可以采用下面方式 \u000d 或者 \r: <script> var res=confirm(\"这是测试工作: \ ...

  10. [android] 练习使用ListView(二)

    主要练习异步任务和LruCache缓存 package com.android.test; import java.io.InputStream; import java.net.HttpURLCon ...