前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【LeetCode第 160 场周赛】5239. 循环码排列

【LeetCode第 160 场周赛】5239. 循环码排列

作者头像
韩旭051
发布2019-11-07 22:34:32
3010
发布2019-11-07 22:34:32
举报
文章被收录于专栏:刷题笔记刷题笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/shiliang97/article/details/102785299

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

  • p[0] = start
  • p[i]p[i+1] 的二进制表示形式只有一位不同
  • p[0]p[2^n -1] 的二进制表示形式也只有一位不同

指向知识点格雷码:我考试时候猜到了逆序加一

示例 1:

代码语言:javascript
复制
输入:n = 2, start = 3
输出:[3,2,0,1]
解释:这个排列的二进制表示是 (11,10,00,01)
     所有的相邻元素都有一位是不同的,另一个有效的排列是 [3,1,0,2]

示例 2:

代码语言:javascript
复制
输出: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

排行榜上 别人的答案。。。也看不懂

代码语言:javascript
复制
int gray[70000];
class Solution {
public:
    vector<int> circularPermutation(int n, int start) {
        vector<int> ans;
        for (int i = 0; i < (1 << n); ++i)
            gray[i] = (i ^ (i >> 1));
        int pos = 0;
        for (int i = 0; i < (1 << n); ++i)
            if (gray[i] == start) {
                pos = i;
                break;
            }
        for (int i = pos; i < (1 << n); ++i)
            ans.push_back(gray[i]);
        for (int i = 0; i < pos; ++i)
            ans.push_back(gray[i]);
        return ans;
    }
};
代码语言:javascript
复制
class Solution {
public:
    int num[1<<16|5];
    vector<int> circularPermutation(int n, int start) {
        vector<int>ans;
        for(int i=0;i<1<<n;i++)num[i]=0;
        for(int i=1;i<=n;i++)for(int j=(1<<i)-1;j>=1<<i-1;j--)
            num[j]=1<<i-1|num[(1<<i)-1-j];
        int pos;
        for(int i=0;i<1<<n;i++)if(num[i]==start){
            pos=i;
            break;
        }
        for(int i=pos;i<1<<n;i++)ans.push_back(num[i]);
        for(int i=0;i<pos;i++)ans.push_back(num[i]);
        return ans;
    }
};

姊妹题

Contest - 2018全校C语言程序设计作业6 http://oj.acm.zstu.edu.cn/JudgeOnline/contest.php?cid=4267 1.有16个球,其中白球5个,黑球4个,蓝球7个,如果从其中无返回任意取出10个球,请编写一个程序计算出3种颜色球都有的情况下有多少种颜色搭配,并输出每一种颜色搭配。 2.有n个阀门,编号为1到n,每一个阀门有一个按钮,每按下一次按钮,对应的阀门将会变化状态(如果阀门关闭则会开启,如果阀门开启则会关闭)。目前,这些阀门都是关闭的。这时,有第一个人按下全部的按钮,第二个人按下所有编号为2的倍数的按钮,第三个人按下所有编号为3的倍数的按钮....,一共有K个人,请问最后有哪些阀门是开着的?输入n和k,输出开着的阀门的编号。 示例输入输出: 7 3 1 5 6 7 3.输入一个正整数n,产生一个旋涡方阵。 示例输入输出: 4 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 4.某市筹划从一个矩形地区建造一个正方形广场。但是矩形地区内有许多钉子户,我们用“1”表示。能够建造广场的地方我们用“0”表示。整个地图由用户输入,设计一个算法计算出广场可以建设的最大面积。 示例输入输出: 请输入区域的长和宽: 5 6 请输入0-1矩阵: 1 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 1 0 1 1 1 最大的广场面积:9 5.设计一种0-1码,它有如下特征:使用二进制表示,每两个相邻的数之间只有一个位的值不同,同时最后一个数与第一个数之间也只有一个位的值不同。如三位:0 0 0,0 0 1,0 1 1,0 1 0,1 1 0,1 1 1,1 0 1,1 0 0 编写代码,展示n位的所有0-1码。 示例输入输出: 输入位数: 4 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 1 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 0 0 1 1 0 0 0

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 指向知识点格雷码:我考试时候猜到了逆序加一
  • 排行榜上 别人的答案。。。也看不懂
  • 姊妹题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档