1. 题目

给你两个整数 n 和 start。你的任务是返回任意 (0,1,2,,...,2^n-1) 的排列 p,并且满足:

p[0] = start
p[i] 和 p[i+1] 的二进制表示形式只有一位不同
p[0] 和 p[2^n -1] 的二进制表示形式也只有一位不同
示例 1:
输入:n = 2, start = 3
输出:[3,2,0,1]
解释:这个排列的二进制表示是 (11,10,00,01)所有的相邻元素都有一位是不同的,另一个有效的排列是 [3,1,0,2]示例 2:
输出:n = 3, start = 2
输出:[2,6,7,5,4,0,1,3]
解释:这个排列的二进制表示是 (010,110,111,101,100,000,001,011)提示:
1 <= n <= 16
0 <= start < 2^n

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/circular-permutation-in-binary-representation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

本题是以下两题的组合
LeetCode 89. 格雷编码
LeetCode 189. 旋转数组(环形替换)

  • 生成格雷编码
  • 找到start所在的位置,旋转数组,往右挪 2^n-i 个位置
class Solution {public:vector<int> circularPermutation(int n, int start) {int N = pow(2,n), i;vector<int> ans(N);generateGrayCode(ans,n);for(i = 0; ans[i]!=start; ++i) ;reverse(ans.begin(),ans.end());reverse(ans.begin(),ans.begin()+N-i);reverse(ans.begin()+N-i,ans.end());return ans;}void generateGrayCode(vector<int>& ans, int n){int ni = 1, i, j, k=1;for(i = 0; i < n; ++i){for(j = ni-1; j >= 0; --j)ans[k++] = ans[j] | (1<<i);ni <<= 1;}}
};

LeetCode 1238. 循环码排列(格雷编码+旋转数组)相关推荐

  1. LeetCode每日一题 1238.循环码排列

    1238. 循环码排列 Tag Math Difficulty Medium Link https://leetcode-cn.com/problems/circular-permutation-in ...

  2. 【LeetCode】剑指 Offer 11. 旋转数组的最小数字

    [LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...

  3. 60. Leetcode 面试题 10.03. 搜索旋转数组 (二分查找-局部有序)

    搜索旋转数组.给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详.请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的.若有多个相同元素,返回索引值最小的一个.示例1 ...

  4. leetcode面试题 10.03. 搜索旋转数组(二分法)

    搜索旋转数组.给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详.请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的.若有多个相同元素,返回索引值最小的一个. 示例 ...

  5. leetcode第21天格雷编码

    格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 0 开头. 示例 1: 输入: 2 输出: ...

  6. Leetcode 中等:89.格雷编码

    题目:格雷编码 题号:89 难度:中等 https://leetcode-cn.com/problems/gray-code/ n 位格雷码序列 是一个由 $2^n$ 个整数组成的序列,其中: 每个整 ...

  7. leetcode第89题格雷编码--镜像法

    记住镜像法生成格雷码 class Solution(object):def grayCode(self, n):""":type n: int:rtype: List[i ...

  8. LeetCode 格雷编码问题

    格雷编码 格雷编码的定义 格雷编码的码表 LeetCode 89. 格雷编码 实例 思路与代码 思路一:找规律 代码一 代码二 思路二:与自然数之间的关系(你必须知道,这个规律要去百度才知道) 代码一 ...

  9. LeetCode 88合并两个有序数组89格雷编码

    微信搜一搜:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打卡群,欢迎 ...

最新文章

  1. 支付宝对接3(收费问题)
  2. Tomcat8中的并发ConcurrentDateFormat的实现
  3. 负载测试与压力测试的区别
  4. 腾讯掌舵者马化腾,才是移动互联网的大功臣?
  5. windows10升级助手_去哪升级显卡驱动最靠谱,千万别用驱动精灵,这些方法才稳...
  6. 嵌入式工具——strace
  7. Beetle简单构建TCP服务
  8. IC卡应用系统开发-(一)卡片读写
  9. stm32以中断方式扫描矩阵键盘
  10. 深度Linux挂载盘
  11. 膜片联轴器市场现状及未来发展趋势
  12. Profile Lookup任务详解
  13. 人机交互-3-评估的基础知识
  14. Centos7 压缩文件
  15. Vue 之获取本地IP地址
  16. 【RDMA】intel 因特尔RDMA 驱动和ibverslib 库安装笔记
  17. Win10更新后网络图标变成了英文怎么办?
  18. C语言指针详解(新手入门推荐)
  19. Cpu、核、Java Runtime.getRuntime().availableProcessors()
  20. Oracle定时任务-查询-创建-删除-调用-定时任务时间参数

热门文章

  1. php防错处理,更好的PHP错误处理
  2. 力扣交替打印FooBar
  3. Linux: shell 中命令代换 $() 和 ``(有图有代码有真相!!!)
  4. abap开发注释快捷键_让ABAP开发者更加轻松的若干快捷键
  5. linux 设备驱动总结,linux设备驱动归纳总结.doc
  6. 14 Scroll 滚动搜索
  7. JavaScript权威指南(第5版)pdf
  8. Tracing mysqld Using DTrace
  9. cygwin下的gcc-4.7.1编译心得
  10. 啥叫旁路电容?啥叫去耦?可以不再争论了吗