Python 使用位掩码生成置换

Python 使用位掩码生成置换,python,algorithm,permutation,bitmask,lexicographic,Python,Algorithm,Permutation,Bitmask,Lexicographic,我在网上回答一些编程问题,这个问题引起了我的兴趣。问题定义如下: 这段代码按字典顺序打印字符串的所有排列。有点不对劲。通过修改或添加一行查找并修复它 输入: 输入由一行组成,其中包含一个小写字符字符串,中间没有空格。其长度最多为7个字符,字符按字典顺序排序 def permutations(): global running global characters global bitmask if len(running) == len(characters): print(''.join

我在网上回答一些编程问题,这个问题引起了我的兴趣。问题定义如下:

这段代码按字典顺序打印字符串的所有排列。有点不对劲。通过修改或添加一行查找并修复它

输入:

输入由一行组成,其中包含一个小写字符字符串,中间没有空格。其长度最多为7个字符,字符按字典顺序排序

def permutations():
global running
global characters
global bitmask
if len(running) == len(characters):
    print(''.join(running))
else:
    for i in xrange(len(characters)):
        if ((bitmask>>i)&1) == 0:
            bitmask |= 1<<i
            running.append(characters[i])
            permutations()
            running.pop()

raw = raw_input()
characters = list(raw)
running = []
bitmask = 0
permutations()
输出:

字符串的所有排列每行打印一个,按字典顺序列出

def permutations():
global running
global characters
global bitmask
if len(running) == len(characters):
    print(''.join(running))
else:
    for i in xrange(len(characters)):
        if ((bitmask>>i)&1) == 0:
            bitmask |= 1<<i
            running.append(characters[i])
            permutations()
            running.pop()

raw = raw_input()
characters = list(raw)
running = []
bitmask = 0
permutations()
def置换():
全球运行
全局字符
全局位掩码
如果len(运行)==len(字符):
打印(''.join(运行))
其他:
对于x范围内的i(len(字符)):
如果((位掩码>>i)&1)==0:

位掩码|=1应通过添加以下行再次使位掩码位为0:

bitmask ^= 1<<i
bitmask^=1i)&1)==0:

bitmask |=1感谢您的响应。然而,我仍然感到困惑。循环中if语句的目的是跟踪必须添加的字符吗?@kalev25解释添加了一个示例。