首页 > 其他分享 >1238. 循环码排列

1238. 循环码排列

时间:2023-04-08 18:12:17浏览次数:56  
标签:... 排列 start int 1238 循环码 ans 十进制 格雷

题目链接:1238. 循环码排列

方法:格雷码

解题思路

令 \(N = 2^n-1\),将 \(i = 0, ... , N,\) 分别转换为其对应的格雷码,用 \(g\) 数组存储,即 \(g[i]\) 表示 \(i\) 对应的格雷码的十进制的值。由于题目中 \(start\) 表示的是格雷码的十进制值,且返回的为格雷码的十进制值的数组,在 \(g\) 数组中找 \(g[j] = start\),那么 \(ans = [g[j], ..., g[N-1], ..., g[0], ... ,g[j-1]]\)。

代码

class Solution {
public:
    vector<int> circularPermutation(int n, int start) {
        int N = 1 << n;
        vector<int> g(N);
        int j;
        for (int i = 0; i < N; i ++ ) {
            g[i] = i ^ (i >> 1); // i的二进制格雷码对应的十进制的值
            // 记下start在g数组中的位置,那么ans = [g[j], ... , g[N - 1], g[0], ... , g[j - 1]]
            if (g[i] == start) j = i; 
        }
        vector<int> ans;
        for (int i = j; i < N + j; i ++ ) {
            ans.push_back(g[i % N]);
        }
        return ans;
    }
};

复杂度分析:

时间复杂度:O(\(2^n\));
空间复杂度:O(\(2^n\))。

标签:...,排列,start,int,1238,循环码,ans,十进制,格雷
From: https://www.cnblogs.com/lxycoding/p/17298937.html

相关文章

  • 颜色分类(数组、双指针)、排列序列(递归、数学)、合并区间(数组、排序)
    颜色分类(数组、双指针)给定一个包含红色、白色和蓝色,一共n__个元素的数组,**原地(https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95)**对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数0、1和2分别表示红色、......
  • 【LeeCode】441. 排列硬币
    【题目描述】你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。https://leetcode.cn/problems/arranging-coins/【示例......
  • R语言_排列组合
    组合(combination)choose(n,r)参数:n:元素数量r:组合数返回:来自总共n个元素的r个组合的数量,即nCr值列出所有组合数矩阵:combn(x,n)阶乘:factorial(k)——k!排列(permutation)排列数:choose(n,k)*factorial(k)求排列数的话,可以用gtool......
  • C++函数库——全排列
    全排列,顾名思义,对一个无序数组或者有序数组写出其对应的所有组合,实则为从当前数组顺序开始,排列出所有比当前序列大(默认)或者小的所有组合,所以如果初始为无序数组,则得到的结果并非所有组合1.next_permutation,获取下一个排列结果,及获取比当前序列小的下一个序列1#include<iost......
  • Win7的64系统电脑桌面图标无法随意排列的解决方法
    Win7系统电脑桌面图标不能随意摆放怎么办?电脑桌面图标无法随便排列位置该如何解决?请看下文具体介绍。解决方法:1、系统偶然出现状况,重新启动一下计算机看看;2、确定一下没有启用“自动排列”和“对齐到网络”功能,方法是鼠标在桌面空白处右击,然后点击选择“查看”,检查......
  • 31. 下一个排列
    题目描述整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。例如,arr=[1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典......
  • 51nod 1370 排列与操作
    1370 排列与操作题目来源: TopCoder基准时间限制:2 秒空间限制:131072 KB分值: 320 难度:7级算法题 收藏 关注给定N长排列P,其中排列指数集{1,2,3...N}组成的一个序列,序列中每个元素恰好出现一次。初始时这个排列是给出的。之......
  • 【专题】排列逆序数的奇偶性
    排列逆序数的奇偶性是一个十分常见的属性。不同于直接求逆序数,由于排列的性质,这玩意是可以\(\mathcalO(n)\)直接求解的。为了完成这一点,引入如下基本结论:排列两元素对换,逆序数奇偶性改变。排列的逆序数同余\(n-\#\)环。第一点,在大多数线性代数教材中都有所提及。第二......
  • 【LEETCODE】​​1053. 交换一次的先前排列​
    1053.交换一次的先前排列难度中等95给你一个正整数数组 arr(可能存在重复的元素),请你返回可在 一次交换(交换两数字 arr[i] 和 arr[j] 的位置)后得到的、按字典序排列小于 arr 的最大排列。如果无法这么操作,就请返回原数组。 示例1:输入:arr=[3,2,1]输出:[3,1,2]解释:交换2......
  • 力扣-441. 排列硬币
    你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由k行组成的阶梯,其第i行必须正好有i枚硬币。阶梯的最后一行可能是不完整的。给你一个数字 n,计算并返回可形成完整阶梯行的总行数。应该首先判断数据源是否是有序的,先二分。varrs=ArrangeCoins(180428938......