首页 > 其他 > 详细

字符串的排列

时间:2021-06-23 00:31:52      阅读:19      评论:0      收藏:0      [点我收藏+]

https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof/

 

输入一个字符串,打印出该字符串中字符的所有排列。

 

你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

 

示例:

输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]

 

限制:

1 <= s 的长度 <= 8

 

问题思路:

1.每次选取一个出队,可以将问题划分为子问题。

2.每次出队固定第x位,然后和所有其他位交换使得同级问题被全部找出。

3.使用set去重,只有连着的两位才是不会重复的

class Solution {
public:
    // 当前进入的s, 
    vector<string> ans;
    void dfs(string s, int x){
        if(x == s.length()-1){

            ans.push_back(s);
            return;
        }
        set<int> st;
     

     //每次固定第x位
for(int i=x; i<s.length(); i++){ //当不为连着的时候都是重复。 if(st.find(s[i])!=st.end()) continue; st.insert(s[i]); swap(s[i], s[x]); dfs(s, x+1);
       // 可以不恢复现场,因为本题思路全部向下拆解为所有子问题。 swap(s[i], s[x]); }
return; } vector<string> permutation(string s) { dfs(s, 0); return ans; } };

字符串的排列

原文:https://www.cnblogs.com/ygtzds/p/14920807.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!