美文网首页
算法小例

算法小例

作者: small瓜瓜 | 来源:发表于2019-04-30 13:29 被阅读0次

    遇到一个很有意思的算法问题:
    1-9个数,组成不重复的9位数,想所有的组合的情况输出

    这个算法可以用循环或递归的方式做。

    递归

    主要思路就是:
    将1-9大问题化成小问题
    是不是解决1-2组合两位数即可得出1-3的结果

    1-1组合一位数:

    1

    1-2组合两位数:

    1 2
    2 1

    1-3组合三位数:

    3 1 2
    3 2 1
    1 3 2
    2 3 1
    1 2 3
    2 1 3

    由此我们可以看出1-2只是在1-1的结果之上将2插入
    同理1-3也是在1-2的结果(1 2 ; 2 1)中,将3插入
    由此1-9就是在1-8的结果中将9插入得出

    代码如下:
    python的递归实现:

    def dg(arr, l):
        if l == 0:
            yield arr
        else:
            end_arr = arr[-l:]
            start_arr = arr[0:-l]
            for i in dg(end_arr, l - 1):
                for j in range(len(i) + 1):
                    tmp_arr = i.copy()
                    tmp_arr.insert(j, ' '.join(start_arr))
                    yield tmp_arr
    
    
    arr = ["1", "2", "3","4", "5", "6","7", "8", "9"]
    for i in dg(arr, len(arr) - 1):
        print(' '.join(i))
    

    python的循环实现:

    arr = ["1", "2", "3","4", "5", "6","7", "8", "9"]
    
    arr_result = [[arr[0]]]
    for i in arr[1:]:
        tmp_arr = arr_result.copy()
        arr_result.clear()
        for j in tmp_arr:
            for k in range(len(j) + 1):
                tmp_copy_arr = j.copy()
                tmp_copy_arr.insert(k, ' '.join(i))
                arr_result.append(tmp_copy_arr)
    
    for _ in arr_result:
        print(' '.join(_))
    

    相关文章

      网友评论

          本文标题:算法小例

          本文链接:https://www.haomeiwen.com/subject/bqnmnqtx.html