美文网首页
[41]字符串的排列-美丽联合2018秋

[41]字符串的排列-美丽联合2018秋

作者: jdzhangxin | 来源:发表于2018-11-08 19:51 被阅读10次

1.题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cabcba

  • 输入描述:
    输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母,例如 ac
  • 输出描述:
    [ac, ca]
    
  • 输入示例:
    acc
    
  • 输出示例:
    [acc, cac, cca]
    

2.题目解析

老大轮流做

分析abc的全排列


分析acc的全排列(相当于把abc中的b换成c)

回溯法

3.参考答案

  1. 使用set解决重复和排序问题。
class Solution {
public:
    void Permutation(set<string>& res, string & s, size_t start) {
    if(start == s.length()) {
        res.insert(s);
        return;
    }
    // 从位置k往后,重新排列
    for(size_t i = start; i < s.length(); i++) {
        swap(s[start], s[i]);// 交换位置
        Permutation(res,s, start+1);
        swap(s[start], s[i]);// 还原交换位置
    }
    }
    vector<string> Permutation(string str) {
        if(str.empty()) return vector<string>();
        set<string> res;
        Permutation(res,str,0);
        return vector<string>(res.begin(),res.end());// 把set转成vector
    }
};
  1. 使用vector手动解决重复和排序问题。
class Solution {
public:
    void Permutation(vector<string> &res, string &s, size_t start) {
    if(start == s.length()) {
        res.push_back(s);
        return;
    }
    // 从位置k往后,重新排列
    for(size_t i = start; i < s.length(); i++) {
        if (i != start && s[start] == s[i]) // 重复字符不处理
          continue;
        swap(s[start], s[i]);// 交换位置
        Permutation(res,s, start+1);
        swap(s[start], s[i]);// 还原交换位置
    }
    }
    vector<string> Permutation(string str) {
        vector<string> res;
        if(str.empty()) return res;
        Permutation(res,str,0);
        sort(res.begin(),res.end()); // 排序
        return res;
    }
};
  1. 使用STLnext_permutation()
class Solution {
public:
    vector<string> Permutation(string str) {
        vector<string> res;
        if(str.empty()) return res;
        do {
            res.push_back(str);
        } while(next_permutation(str.begin(), str.end()));
        return res;
    }
};

相关文章

  • [41]字符串的排列-美丽联合2018秋

    1.题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,...

  • 41_字符串的排列

    要求:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排...

  • 迭代算法

    问题 输入一个字符串,给出该字符串所有的排列 问题分析 非常标准的排列问题,不考虑字符串重复的前提下共有n!种排列...

  • LeetCode - 0006 - ZigZag Convers

    题目概要 将字符串按照ZigZag的顺序重新排列,求排列之后的新字符串。 题目链接 ZigZag Conversi...

  • 38:字符串的排列

    题目38:字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列。 举例说明 例如输入字符串abc。则打印出...

  • 字符串的全排列

    字符串的全排列 题目描述: 输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出由字符a...

  • JZ-027-字符串的排列

    字符串的排列 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打...

  • 剑指offer - 字符串的排列

    题目 输入一个字符串,打印出该字符串中字符的所有排列。 例如,输入字符串abc,则打印出由字符串a、b、c能排列出...

  • [18无验证]派分糖果-美丽联合2018秋

    1.题目描述 有 N 个孩子站成一排,每个孩子有一个分值。给这些孩子派发糖果,需要满足如下需求:1、每个孩子至少分...

  • iOS排列组合算法

    问题1、求长度为N的字符串的所有排列,如字符串abc所有排列为:abc,acb,bac,bca,cab,cba。问...

网友评论

      本文标题:[41]字符串的排列-美丽联合2018秋

      本文链接:https://www.haomeiwen.com/subject/zgakoftx.html