LeetCode 1238. Circular Permutation in Binary Representation( python解题报告)

本文探讨了如何根据给定的整数n和起始值,生成一个满足特定条件的循环排列序列。序列中任意两个相邻元素仅在二进制表示下相差一位,并且首尾元素也满足这一条件。解决方案基于格雷码的生成原理,通过异或操作实现了从起始值到目标序列的转换。

1238. Circular Permutation in Binary Representation

  1. Circular Permutation in Binary Representation python solution

题目描述

Given 2 integers n and start. Your task is return any permutation p of (0,1,2…,2^n -1) such that :

p[0] = start
p[i] and p[i+1] differ by only one bit in their binary representation.
p[0] and p[2^n -1] must also differ by only one bit in their binary representation.

在这里插入图片描述

解析

按照题目的要求,生成的码字序列就是格雷码。
而格雷码自身生成的公式为i^(i>>1),自身和右移一位的自己做异或。
但是本体还有一个限定,就是开始的给定了格雷码序列的开始。start=start^0=start
1<<n就相当于2的n次幂!!!!!!!!

// An highlighted block
class Solution:
    def circularPermutation(self, n, start):
        return [start ^ i ^ i >> 1 for i in range(1 << n)]

Reference

https://leetcode.com/problems/circular-permutation-in-binary-representation/discuss/414203/JavaC%2B%2BPython-4-line-Gray-Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值