腾讯精选练习 50 题 Day9
题目:89. 格雷编码
来源:力扣(LeetCode) https://leetcode-cn.com/problems/gray-code/
【中等】格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。格雷编码序列必须以 0 开头。
输入: 2
输出: [0,1,3,2]
解释:
00 - 0
01 - 1
11 - 3
10 - 2
对于给定的 n,其格雷编码序列并不唯一。
解题思路
模拟编码机制,发现 n 每次+1时,新增的编码数与原有编码数相同。且原有位数对称,新增的一位取1。
图片转载自LeetCode。
动态规划:执行代码
import java.util.*;
class Solution {
public List<Integer> grayCode(int n) {
List<Integer> list = new ArrayList<>();
if(n==0) return list;
int temp = 0;
list.add(0);
for(int i = 1;i<=n;i++){
temp = 1<<(i-1);
for(int j = 1;j<=temp;j++){
list.add(temp+list.get(temp-j));
}
}
return list;
}
}
复杂度
时间复杂度:O( 2^n )
空间复杂度:O( 1 )
题目:88.合并两个有序数组
简单,故不做题解。
题目:104. 二叉树的最大深度
简单,故不做题解。