美文网首页
算法小例

算法小例

作者: 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(_))

相关文章

  • 算法小例

    遇到一个很有意思的算法问题:1-9个数,组成不重复的9位数,想所有的组合的情况输出 这个算法可以用循环或递归的方式...

  • 堆排序

    【啊哈!算法】算法11:堆——神奇的优先队列(上) 以小顶堆为例,(小顶堆一般用来实现降序排列)讲一下堆排序的思路...

  • LeetCode--求最长不重复子字符串

    测试用例: 算法如下

  • 知识篇——AdaBoost算法小例

    写在前面 新开个分类吧,我发现算法不及时写成简单易懂的总结文档,很快就忘光了。文档的作用,是给未来那个傻逼自己看的...

  • 第二章:排序基础

    选择排序算法(selectionSort) 算法思想: 算法图示: 使用模板(泛型)编写算法:随机生成算法测试用例...

  • 最小生成树——Kruskal

    图论算法理论、实现及应用样例 例 3.1 利用Kruskal算法求图3.3(a)所示的无向网的最小生成树,并输出一...

  • awesome 蚁群算法

    蚁群算法介绍(以TSP问题为例)

  • Python3 趣味系列题7(续) ------ A

    前文:Python3 趣味系列题7 ------ Prim算法生成完美迷宫 一、A*算法 寻找路径的算法有很多,例...

  • DES/AES、SM4、RSA、SM2、SM3

    现以分组密码算法(DES和SM4)、公钥密码算法(RSA和SM2)、摘要算法(SM3)为例,谈谈国际算法和国密算法...

  • 用Swift实现快速排序算法(含动画演示)

    快速排序算法是一种时间复杂度为O(nlogn)的算法。 测试用例:

网友评论

      本文标题:算法小例

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