zoukankan      html  css  js  c++  java
  • 每天一道算法题(39)——含有重复字符的全排列

    思路

    (1)对于含有重复字符的全排列必须使用isSwap函数
    (2)整体思路
         a,交换当前子字符串(i----n-1)字符与子字符串后面的每一个位置的字符(满足交换条件下)
         b,子字符串位置后移(i+1-----n)。递归处理子字符串
         c,将a中的交换复原。


    代码

    #include <iostream>  
    #include"string"
    using namespace std;
    void swap(char& a,char& b){//交换
    	char temp=a;
    	a=b;
    	b=temp;
    }
    //***************************判断是否交换**********************************************************//
    //当前需要交换的位置为m, 被交换的字符位置为n ,则s[n]应该异于s[m]---s[n-1]之间的任意一个字符
    bool isSwap(string s,int m,int n){
    	for(int i=m;i<n;i++)
    		if(s[i]==s[n])
    			return false;
    	return true;
    }
    
    //递归全排列
    void permute(string s,int n){
    	if(n+1==s.length()){
    		cout<<s<<endl;
    	    return;
    	}
    	permute(s,n+1);
    	char temp;
    	for(int i=n+1;i<s.length();i++){
    		if(isSwap(s,n,i)){
    			swap(s[n],s[i]);
    			permute(s,n+1);
    			swap(s[n],s[i]);
    		}
    	}
    }
    void main(){
    	string s("12233");
    	permute(s,0);
    }





  • 相关阅读:
    schedule和scheduleAtFixedRate的区别
    JAVAWEB项目报"xxx响应头缺失“漏洞处理方案
    springboot整合swagger初探指南
    wsl安装jdk
    树莓派开机启动chrome并全屏
    数据库06_数据库设计
    数据库05_事务处理
    数据库04_SQL简单实践
    Spring-AOP
    数据库03_SQL语句
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5392960.html
Copyright © 2011-2022 走看看