1、题目:给定一个字符串,输出所有的字典序。

如:

输入字符串:'ac',输出:['ac','ca']

输入字符串:‘abc' ,输出:['abc','acb','bac','bca','cab','cba']

输入字符串:‘acc',输出:['acc','cac','cca']

2、递归:

如:'abc',对于'a',返回’bc'的全排列字典序,对于'b',返回'ac'的全排列,对于'c',返回'ab‘的全排列。【循环加递归】

代码1:

def printstr(s):
result=[]
if len(s)==1:
result.append(s)
return result
else:
for i in range(len(s)):
for item in printstr(s[:i]+s[i+1:]):
result.append(s[i]+str(item))
return result
s='abc'
print(printstr(s))
def printstr(s):
liststr=[]
result=[]
if len(s)==1:
liststr.append(s)
return liststr
else:
for i in range(len(s)):
liststr1=printstr(s[:i]+s[i+1:])
for item in liststr1:
result.append(s[i]+str(item))
return list(set(result))
s=input()
print(printstr(s))

代码2:

res = list()
def traverse(ss,join_ss=''):
if ss:
for i,s in enumerate(ss):
sub_ss = ss[:i]+ss[i+1:]
traverse(sub_ss,join_ss+s)
elif join_ss and join_ss not in res:
res.append(join_ss)
return res result = traverse('abc','')
print(result)

 几个全排列的itertool的函数:combinations(),permutations(),product()

https://www.cnblogs.com/aiguiling/p/8594023.html

product 笛卡尔积  (有放回抽样排列)

permutations 排列  (不放回抽样排列)

combinations 组合,没有重复  (不放回抽样组合)

combinations_with_replacement 组合,有重复  (有放回抽样组合)

import itertools
## 下面repeat大小可以大于 abc的个数
## product : 笛卡尔乘积
for x in itertools.product('abc', repeat=2):
print(x)
###
('a', 'a')
('a', 'b')
('a', 'c')
('b', 'a')
('b', 'b')
('b', 'c')
('c', 'a')
('c', 'b')
('c', 'c')
### for x in itertools.combinations('abc',2):
print(x)
###
('a', 'b')
('a', 'c')
('b', 'c')
### for x in itertools.permutations('abc',2):
print(x)
###
('a', 'b')
('a', 'c')
('b', 'a')
('b', 'c')
('c', 'a')
('c', 'b')
###

import itertools
m,n = input().split(',')
n = int(n)
def minNum(m,n):
if len(m) <= n:
return m
min_num = 9999999
for num in itertools.combinations(m,len(m) - n):
min_num = min(int("".join(num)),min_num)
return str(min_num)
print(minNum(m,n))

算法9-----输出全排列(递归)---移除K个数,剩下最小数。的更多相关文章

  1. 算法进阶面试题02——BFPRT算法、找出最大/小的K个数、双向队列、生成窗口最大值数组、最大值减最小值小于或等于num的子数组数量、介绍单调栈结构(找出临近的最大数)

    第二课主要介绍第一课余下的BFPRT算法和第二课部分内容 1.BFPRT算法详解与应用 找到第K小或者第K大的数. 普通做法:先通过堆排序然后取,是n*logn的代价. // O(N*logK) pu ...

  2. [算法]找到无序数组中最小的K个数

    题目: 给定一个无序的整型数组arr,找到其中最小的k个数. 方法一: 将数组排序,排序后的数组的前k个数就是最小的k个数. 时间复杂度:O(nlogn) 方法二: 时间复杂度:O(nlogk) 维护 ...

  3. 算法题解:最大或最小的K个数(海量数据Top K问题)

    题目 输入 n 个整数,找出其中最小的 k 个数.例如输入4.5.1.6.2.7.3.8 这8个数字,则最小的4个数字是1.2.3.4. 初窥 这道题最简单的思路莫过于把输入的 n 个整数排序,排序之 ...

  4. 算法系列:寻找最大的 K 个数

    Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...

  5. 编程之法:面试和算法心得(寻找最小的k个数)

    内容全部来自编程之法:面试和算法心得一书,实现是自己写的使用的是java 题目描述 输入n个整数,输出其中最小的k个. 分析与解法 解法一 要求一个序列中最小的k个数,按照惯有的思维方式,则是先对这个 ...

  6. 有n个数,输出其中所有和为s的k个数的组合。

    分析:此题有两个坑,一是这里的n个数是任意给定的,不一定是:1,2,3...n,所以可能有重复的数(如果有重复的数怎么处理?):二是不要求你输出所有和为s的全部组合,而只要求输出和为s的k个数的组合. ...

  7. 寻找最小(最大)的k个数

    题目描述:输入n个整数,输出其中最小的k个元素. 例如:输入1,2,3,4,5,6,7,8这8个数字,则最小的4个数字为1,2,3,4. 思路1:最容易想到的方法:先对这个序列从小到大排序,然后输出前 ...

  8. 03寻找最小的k个数

    题目描述:查找最小的k个元素         题目:输入n个整数,输出其中最小的k个.         例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4. 1:最简单 ...

  9. 找出N个数中最小的k个数问题(复杂度O(N*logk))

    这是一个经典的算法题,下面给出的算法都在给定的数组基础上进行,好处时不用分配新的空间,坏处是会破坏原有的数组,可以自己分配新的空间以避免对原有数组的破坏. 思路一 先直接排序,再取排序后数据的前k个数 ...

随机推荐

  1. 义隆单片机学习笔记之(一) 硬件框架&资源下载

    参考网址: 点击链接或右键链接地址 (台湾义隆官网)http://www.emc.com.tw/chs/tech_8bit.asp (EM78P153K官方资料)http://www.emc.com. ...

  2. 第35课.函数对象分析("()"重载)

    1.编写一个函数 a.函数可以获得斐波那契数列 b.每调一次返回一个值 c.函数可以根据需要重复使用 2.函数数对象 a.使用具体的类对象取代函数 b.改类的对象具备函数调用的行为 c.构造函数指具体 ...

  3. UWP笔记-自定义Grid背景图片

    之前写简单的UWP版本地音乐播放器,有自定义背景壁纸的功能,现在贴在这里回顾下. Page.xaml 页面,添加Grid <Grid x:Name="mainGrid"/&g ...

  4. [LuoguP2151][SDOI2009]HH去散步_递推_矩阵乘法_图论

    HH去散步 题目链接:https://www.luogu.org/problem/P2151 数据范围:略. 题解: 数据范围好小,让人不禁想用一些毒瘤算法,但是失败了. 这种类似时间啊这种有点重复味 ...

  5. Technocup 2020 - Elimination Round 1补题

    慢慢来. 题目册 题目 A B C D tag math strings greedy dp 状态 √ √ √ √ //∅,√,× 想法 A. CME res tp A 题意:有\(n\)根火柴,额外 ...

  6. phpstorm右侧边栏怎么打开?

    开启PHPstorm右侧边栏的方法: 一般phpstorm默认只能打开10个文件,超过就隐藏了,想要打开更多:

  7. redis快速开始

    1 下载地址:http://redis.io/download 2 安装步骤: 3 # 安装gcc 4 yum install gcc 5 6 # 把下载好的redis‐5.0.3.tar.gz放在/ ...

  8. 12-MySQL DBA笔记-MySQL复制

    第12章 MySQL复制 本章将为读者讲述MySQL的复制技术,首先,介绍最基础的主从复制,它是其他所有复制技术的基础,接着再为读者讲述各种复制架构的搭建,最后,列举了一些常见的复制问题及处理方式.复 ...

  9. TCP协议探究(三):RTT、滑动窗口和阻塞处理

    1 RTT算法 1.1 概述 上一节说了重传机制需要设置一个重传超时值(RTO,Retransmission TimeOut),RTO设长了,重发太慢:设短了,可能导致包没有丢,就重发了,可能导致雪崩 ...

  10. Visual Studio新建类自动添加注释

    修改 VS中新建类的模板 如以下地址:D:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache\CSha ...