大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍了LeetCode如何输入字符串的排列,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
我们提供的服务有:成都做网站、成都网站建设、微信公众号开发、网站优化、网站认证、太平ssl等。为近1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的太平网站制作公司
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
1 <= s 的长度 <= 8
输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"]
O(N*N!)
N!
种, 从当前字符串转入下一个字符串最坏情况下需要
O(N)
时间O(1)
class Solution:
def permutation(self, s: str) -> List[str]:
res = []
def getNext(s):
for i in range(len(s) - 1)[::-1]:
# 从后向前查找
if s[i] < s[i + 1]:
# 找到目标字符了, 接下来找后面部分中大于s[i]且最接近它的字符
j = i + 1
while j < len(s) and s[j] > s[i]:
j += 1
# s[j-1]就是后面部分中大于s[i]且最接近它的字符
j -= 1
# 单独拿出右边部分, 肯定严格按照降序排列
right = s[i + 1:j] + s[i] + s[j + 1:]
# 交换字符后, 并加上右边的翻转部分(增序, 最小字典序), 就是下一个字典序的字符串
return s[0:i] + s[j] + right[::-1]
# 没找到下一个字符串, 说明当前字符串就是字典序最大的了, 直接返回None
return None
# 先拿到字典序最小的字符串
s = ''.join(sorted(s))
while s is not None:
res.append(s)
s = getNext(s)
return res
感谢你能够认真阅读完这篇文章,希望小编分享的“LeetCode如何输入字符串的排列”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!