剑指 Offer 38:字符串的排列

简介: 剑指 Offer 38:字符串的排列

题目

题目链接

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

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

示例:

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

解题

方法一:回溯

这是一道全排列问题,涉及去重

leetcode-47:全排列 II是一样的思路

class Solution {
public:
    vector<string> res;
    string path;
    void backtracing(string s,vector<bool>& used){
        if(path.size()==s.size()){
            res.push_back(path);
            return;
        }
        for(int i=0;i<s.size();i++){
            if(i>0&&s[i]==s[i-1]&&used[i-1]==false) continue;
            if(used[i]==false){
                used[i]=true;
                path.push_back(s[i]);
                backtracing(s,used);
                path.pop_back();
                used[i]=false;
            }
        }
    }
    vector<string> permutation(string s) {
        sort(s.begin(),s.end());
        vector<bool> used(s.size(),false);
        backtracing(s,used);
        return res;
    }
};
相关文章
|
3月前
|
存储 搜索推荐 C++
剑指 Offer(第 2 版)刷题 | 03. 数组中重复的数字
本文是作者针对《剑指 Offer(第 2 版)》中 "数组中重复的数字" 问题的刷题记录,分享了使用排序算法和相邻比较大小两种方法来找出数组中的重复数字,并提供了C++的实现代码。
剑指 Offer(第 2 版)刷题 | 03. 数组中重复的数字
|
机器学习/深度学习 Cloud Native
【刷题日记】剑指 Offer II 083. 没有重复元素集合的全排列
本次刷题日记的第 35 篇,力扣题为:剑指 Offer II 083. 没有重复元素集合的全排列 ,中等
|
7月前
剑指 Offer 20:表示数值的字符串
剑指 Offer 20:表示数值的字符串
44 0
|
7月前
剑指 Offer 50:第一个只出现一次的字符
剑指 Offer 50:第一个只出现一次的字符
39 0
|
7月前
剑指 Offer 42:连续子数组的最大和
剑指 Offer 42:连续子数组的最大和
43 0
图解LeetCode——剑指 Offer 58 - I. 翻转单词顺序
图解LeetCode——剑指 Offer 58 - I. 翻转单词顺序
97 1
 图解LeetCode——剑指 Offer 58 - I. 翻转单词顺序
剑指 Offer 58 - I. 翻转单词顺序
剑指 Offer 58 - I. 翻转单词顺序
75 0
【每日一题】力扣剑指 Offer II 075. 数组相对排序
【每日一题】力扣剑指 Offer II 075. 数组相对排序
【每日一题】力扣剑指 Offer II 075. 数组相对排序
【LeetCode】-- 剑指 Offer 42. 连续子数组的最大和
【LeetCode】-- 剑指 Offer 42. 连续子数组的最大和
【LeetCode】-- 剑指 Offer 42. 连续子数组的最大和