域名购买成功后网站怎么建设,江苏网页设计公司,做性的视频网站,专门做西装网站1. 题目
给你两个整数 n 和 start。你的任务是返回任意 (0,1,2,,...,2^n-1) 的排列 p#xff0c;并且满足#xff1a;
p[0] start
p[i] 和 p[i1] 的二进制表示形式只有一位不同
p[0] 和 p[2^n -1] 的二进制表示形式也只有一位不同示例 1#xff1a;
输入#xff1a;n 2…1. 题目
给你两个整数 n 和 start。你的任务是返回任意 (0,1,2,,...,2^n-1) 的排列 p并且满足
p[0] start
p[i] 和 p[i1] 的二进制表示形式只有一位不同
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:vectorint circularPermutation(int n, int start) {int N pow(2,n), i;vectorint 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(vectorint ans, int n){int ni 1, i, j, k1;for(i 0; i n; i){for(j ni-1; j 0; --j)ans[k] ans[j] | (1i);ni 1;}}
};