python3数字全排列怎么搞_python3实现字符串的全排列的方法(无重复字符)
最近在学一些基础的算法,发现我的数学功底太差劲了,特别是大学的这一部分,概率论、线性代数、高数等等,这些大学学的我是忘得一干二净(我当时学的时候也不见得真的懂),导致现在学习算法,非常的吃力。唉!不说了,补习中。。。
抛出问题
求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321。(暂时假定字符串没有重复)
解决方案
目前有两种解决的方法
方法一:
def str_sort(s=''):
if len(s) <= 1:
return [s]
str_list = []
for i in range(len(s)):
for j in str_sort(s[0:i] + s[i + 1:]):
str_list.append(s[i] + j)
return str_list
str_list = str_sort('abc')
print(len(str_list), str_list)
这种理解起来非常好理解,就是循环遍历每个字符,让每个字符打头,然后继续递归遍历后边的字符
方法二:
#字符串任意两个位置字符交换
def str_replace(str, x, y):
if x == y:
return str
x_val = str[x:x+1]
y_val = str[y:y+1]
if x < y:
str = str[0:x] + y_val + str[x+1:y] + x_val + str[y+1:len(str)]
else:
str = str[0:y] + x_val + str[y+1:x] + y_val + str[x+1:len(str)]
return str
#递归求结果
def str_sort(str,x):
if x == len(str): #当x为字符串的最大长度时返回当前字符交换的结果
global str_list
str_list.append(str)
return
for i in range(x,len(str)):
str = str_replace(str,i,x) #递归遍历第i个字符,
str_sort(str,x+1)
str = str_replace(str,x,i) #恢复字符串原来的顺序,便于下次遍历
s = 'abc'
global str_list
str_list = []
str_sort(s,0)
print(len(str_list), str_list)
这种方法在求解的思路上就已经有了很大的提升,不是像上一个靠“蛮力”去解决问题,这是递归的一种方式,大概原理就是,先保持前I个字符不变,遍历交换后边的字符,这样一直递归到,最后两个字符,然后再返回去改变倒数第三个字符,再次遍历后边的两位,直到三个字符的全部输出,也就是这样的顺序,
第一次输出 X(n),X(n-1),X(n-2),......X(3),X(2),X(1)
第二次输出 X(n),X(n-1),X(n-2),......X(3),X(1),X(2)
第三次输出 X(n),X(n-1),X(n-2),......X(2),X(3),X(1)
第四次输出 X(n),X(n-1),X(n-2),......X(2),X(1),X(3)
......
这个可能我讲的不是特别清楚,理解起来不是特别容易,这种方式经过我的测试,发现他更费时。
自我感觉两种方法区别不大,原理上是一样的,都是先确定前面的部分,处理后边的,从后往前走。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
python3数字全排列怎么搞_python3实现字符串的全排列的方法(无重复字符)相关推荐
- python3实现字符串的全排列的方法(无重复字符)
抛出问题 求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时假定字符串没有重复) 解决方案 目前有两种解决的方法 方法一: def str_ ...
- python输入多个字符串、输入最长的一串_无重复字符的最长子串(Python之暴力求解)...
无重复字符的最长子串(Python之暴力求解) 例题: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: (1) 输入: "abcabcbb" 输出: 3 ...
- 牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案
牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案 题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 题解: i和j两个指针分别指不重复子 ...
- 常考数据结构与算法:找到字符串的最长无重复字符子串
题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 示例1 输入 [2,3,4,5] 返回值 4 示例2 输入 [2,2,3,4,3] 返回值 3 方法 ...
- 求字符串中最长无重复字符的子串
题目:求一个字符串中最长的没有重复字符的子串. 思路:用hash表从i遍历查看包含i的最长 无重复子串. int max_unique_substring2(char * str) {int i,j; ...
- 找到字符串的最长无重复字符子串
题目: 给定一个字符串str,返回str中最长无重复字符子串的长度. 举例: str = "abcd",返回4. str = "aabcb",返回3. 基本思 ...
- python字符串中最长的连续升序子串_Leetcode刷题练Python无重复字符的最长子串
这是一道字符串处理算法的题目,在日常编程中,处理字符串是常见任务.该题目会涉及到一个概念"滑动窗口". 一.题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度 ...
- 【LeetCode笔记】3. 无重复字符的最长子串(JAVA、滑动窗口、字符串)
文章目录 题目描述 思路 && 代码 1. 之前的版本 更新 2.0 题目描述 子串:各字符间必须要相邻,而非子序列 使用滑动窗口来做就行 思路 && 代码 1. 之前 ...
- 《程序员代码面试指南》第五章 字符串问题 找到字符串的最长无重复字符子串...
题目 找到字符串的最长无重复字符子串 java代码 努力中.... 转载于:https://www.cnblogs.com/lizhouwei/p/8955166.html
最新文章
- ros::spinOnce()机制 有点东西
- 报名 | 统计学概论和医疗临床大数据分析讲座
- vue 分模块打包 脚手架_vue-cli分模块独立打包
- C++:类-多态的学习和使用
- dijkstra算法原理_这 10 大基础算法,程序员必知必会!
- ni软件可以卸载吗_黑科技 | 2020全新AI人工智能修图汉化版软件!这下可以放心卸载PS啦!...
- 【算法刷题2】二叉树的后序遍历
- oracle 不等函数,SQL(Oracle)日常使用与不常使用函数的汇总
- Java国际化概念和使用介绍
- laravel获取当前的url以及当前的基础域名方法汇总
- 中低频量化交易策略研发05_推进分析
- 黑客已经盗了 $15,945,221.72 美元!
- php做网页的流畅,Easying轻量流畅
- nginx升级与回退
- python自动化测试怎么提高效率_自动化测试更适合缺陷预防,而不是提高测试效率...
- excel 工作表保护密码破解代码
- 使用Matlab对大地测量学中的大地坐标和大地空间直角坐标进行相互转换
- ERROR: No matching distribution found for cv2解决方案
- 基于神经网络识别抑郁症附matlab代码
- 冰箱的矢量变频技术是什么
热门文章
- ubuntu下搭建一个数据化处理的开发环境
- Linux驱动技术(三) _DMA编程
- Oracle数据表和Constraint管理
- BUG管理系统(Mantis)迁移实录
- XML格式对象序列化(2)
- Windows Server 2003活动目录:管理特征
- ORIG1和ORIG2的运用
- 802.11协议中的action帧的使用
- PAT甲级1028 List Sorting:[C++题解]排序,cin和cout会超时
- 汤家凤高等数学基础手写笔记-曲线与曲面积分