zoukankan      html  css  js  c++  java
  • 剑指offer:字符串的排列

    题目描述:

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

    输入描述:

    输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

    解题思路:

    这题需要用分治思想,递归解决。

    把一个字符串看成两部分组成:第一部分为第一个字符,第二部分为后面的所有字符。

    求整个字符串的排列,可以看出两步:首先求所有可能出现在第一个位置的字符,即把第一个字符和后面的所有字符交换;然后固定第一个字符,求后面所有字符的排序。此时仍把后面的字符看成两部分,第一个字符和后面的字符,然后重复上述步骤。(递归)

    注意可能有重复的字符,需要判断一下,略过。

    代码:

    class Solution {
    public:
        void Permutation_once(vector<string>& s, string str, int start)
        {
            if(start == str.size()-1)
                s.push_back(str);
            for(int i=start; i<str.size(); i++)
            {
                if(i!=start && str[start]==str[i])
                {
                    continue;
                }
                swap(str[start], str[i]);
                Permutation_once(s, str, start+1);
                swap(str[i], str[start]);               
            }
        }
        
        vector<string> Permutation(string str) {
            vector<string> s;
            if(str.length()==0)
                return s;
            Permutation_once(s, str, 0);
            sort(s.begin(), s.end());
            return s;
        }
    };
  • 相关阅读:
    1.1【基本路由原理】(二层转发原理)1
    NP课前资料2-IOU的传统安装方式
    NP课前资料1-安装GNS3桥接ASA
    1.2 数据仓库的特性
    1-1 事务型处理与分析型处理
    易用性测试关注点(转)
    Jenkins+svn+ant+tomcat持续集成
    并发数计算
    性能测试需求采集
    性能测试指标分析与监控
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/10622306.html
Copyright © 2011-2022 走看看