一道按顺序排列组合题的几种解法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jerry_1126/article/details/85411506

有一道面试题: 一个字符串"Yes", 用代码实现,输出其全部大小写组合,

比如说字符串"no"则输出['no', 'No', 'nO', 'NO']

想到了如下的几种解法:

方法一:借助于itertools.combinations

# coding = utf -8

def handle_string(src=""):
    from itertools import combinations
    res = ""
    for char in src:
        res += char.upper() + char.lower()
    words = list(combinations(list(res), 3))
    for i in range(len(src)):
        words = ["".join(item) for item in filter(lambda x:x[i].lower() == src[i].lower(), words)]
    return words

if __name__ == "__main__":
    print(handle_string("Yes"))

方法二:借助于random模块

# coding = utf -8

def handle_string(src=""):
    import random
    sl = src.lower()
    su = src.upper()
    sa = ["".join(list(x+y)) for (i, x) in enumerate(sl) for (j, y) in enumerate(su) if i == j]
    temp = []
    lens = 2 ** len(src)
    while True:
        item = "".join(random.choice(i) for i in sa)
        if item not in temp:
            temp.append(item)
        if len(temp) == lens:
            break
    return temp

if __name__ == "__main__":
    print(handle_string("Yes"))

猜你喜欢

转载自blog.csdn.net/Jerry_1126/article/details/85411506