【Leetcode】【Medium】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 - 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的更多相关文章
- 【LeetCode题意分析&解答】40. Combination Sum II
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...
- 【LeetCode题意分析&解答】37. Sudoku Solver
Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...
- 【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 ...
- ACM金牌选手整理的【LeetCode刷题顺序】
算法和数据结构知识点图 首先,了解算法和数据结构有哪些知识点,在后面的学习中有 大局观,对学习和刷题十分有帮助. 下面是我花了一天时间花的算法和数据结构的知识结构,大家可以看看. 后面是为大家 精心挑 ...
- 【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 ...
- 【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 ...
- 【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 ...
- 【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 ...
- 【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 ...
- 【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 ...
随机推荐
- ajax中的异步机制导致的问题
设置async:false;即可将请求设置为同步的,所以,我们就可以实现:在ajax请求之后再执行下面的语句.
- 使用discover批量执行用例
TestLaoder 该类负责根据各种条件加载测试用例,并将它们返回给测试套件,正常情况下,不需要创建这个类的实例,unittest提供了可以共享的defaultTestLoader类,可以使用其子类 ...
- 解决eclipse下tomcat启动超时
- Docker 教程
转自:http://www.runoob.com/docker/docker-tutorial.html Docker 教程
- 网站部署中遇到的问题-未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项
问题描述: 运行站点抛出错误:未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项 原因: 应用程序池没有启用32位程序. 解决方法: 找到站点对应的应用程序池,设置启用32 ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)(二)
七. 构建临时系统 1. 通用编译指南 a. 确认是否正确设置了 LFS 环境变量 echo $LFS b. 假定你已经正确地设置了宿主系统需求和符号链接 c. 对于每个软件包: (1). 确保解压软 ...
- dokcer安装并开机自启动服务
linux内核最好是3.10以上.不过本次使用的是centos6.5 内核2.6 1.yum -y install docker-io 如果出现: 需要安装yum源: 3.service docker ...
- jquery对象与核心函数
原生js入口函数与jQuery入口函数的区别 1.window.onload与document.ready在加载时间上的差异 document.ready会先触发,其次才是window.onload ...
- java.util.concurrent.CyclicBarrier 使用
1.概述 java.util.concurrent.CyclicBarrier(循环的栅栏), 构造时设置一个计数器数(count), 各线程通过调用barrier.await()进入等待,并且计数+ ...
- var a =10 与 a = 10的区别
学习文章------汤姆大叔-变量对象 总结笔记 变量特点: ①变量声明可以存储在变量对象中.②变量不能直接用delete删除. var a =10 与 a = 10的区别: ①a = 10只是为全局 ...