剑指 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;
    }
};
相关文章
|
2月前
|
存储 搜索推荐 C++
剑指 Offer(第 2 版)刷题 | 03. 数组中重复的数字
本文是作者针对《剑指 Offer(第 2 版)》中 "数组中重复的数字" 问题的刷题记录,分享了使用排序算法和相邻比较大小两种方法来找出数组中的重复数字,并提供了C++的实现代码。
剑指 Offer(第 2 版)刷题 | 03. 数组中重复的数字
|
6月前
剑指 Offer 53 - I:在排序数组中查找数字 I
剑指 Offer 53 - I:在排序数组中查找数字 I
38 0
|
6月前
剑指 Offer 03:数组中重复的数字
剑指 Offer 03:数组中重复的数字
27 0
|
6月前
剑指 Offer 50:第一个只出现一次的字符
剑指 Offer 50:第一个只出现一次的字符
35 0
|
6月前
剑指 Offer 20:表示数值的字符串
剑指 Offer 20:表示数值的字符串
42 0
|
6月前
剑指 Offer 04:二维数组中的查找
剑指 Offer 04:二维数组中的查找
31 0
图解LeetCode——剑指 Offer 53 - I. 在排序数组中查找数字 I
图解LeetCode——剑指 Offer 53 - I. 在排序数组中查找数字 I
82 0