题目描述:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
解题思路一:
时间复杂度:$O(nlogn)$, 空间复杂度:$O(n)$.
1 | class Solution { |
解题思路二:
思想:
1,3, 5, 7, 6, 4, 2, 1
第一步: 从后往前找到第一个比后面数小的,记做sw1. 1, 2, sw1, 7, 6, 4, 2, 1
第二步: 从后往前找到第一个比sw1数大的,记做sw2. 1, 2, sw1 5, 7, sw2 6, 4, 2, 1
第三步:交换sw1和 sw2 1, 2, sw1 6, 7, sw2 5 4, 2, 1
第四步:sw1之后的数进行排序 1, 2, sw1 6,1, 2, 4, 5, 7
时间复杂度:$O(nlogn)$, 空间复杂度:$O(n)$.
1 | class Solution { |