zoukankan      html  css  js  c++  java
  • 字符串去重全排列

    字符串的去重全排列

    • 应用场景暴力破解填空题目
    • 全排列
            #define SWAP(x,y,t) ((t) = (x),(x) = (y),(y) = (t))//用于交换两个数 使用宏定义最好加上()以免引起歧义
    	
    	bool isSwap(char *list, int begin, int end) { //判断是否相同以决定是否要交换
    		for (int i = begin; i < end; i++){
    			if (list[i] == list[end])
    				return false;
    		}
    		return true;
    	}
    	
    	void perm(char *list, int i, int n){ //递归写法求全排列
    		int j, temp;
    		if (i == n) { //递归出口
    			printf("	%s
    ", list);
    		}
    		else {
    			for (j = i; j <= n; j++){
    				if (isSwap(list, i, j)) { //不去重的话就是组合的形式
    					//使用宏定义,传的是数值,如果这的swap用函数实现,传的应该是指针
    					 SWAP(list[i], list[j], temp);
    					//交互位置后,输出以list[j]不变,后面的字母改变的所有排列
    					perm(list, i + 1, n);
    					SWAP(list[i], list[j], temp);
    				}   
    			}
    		}
    	}
    

    调用方式:
    char list[] = {'a', 'b', 'c', 'd'};//{'1', '2', '3', '2'} 处理数字版本
    perm(list, 0, strlen(list) - 1)

  • 相关阅读:
    阅读提问
    阅读笔记
    结对需求分析
    分工
    对软件工程课程的期望
    JAVAWEB-Spring Boot学习
    团队编程-项目作业6-程序维护
    团队-吃货之家-项目总结
    团队编程项目作业5-小组评分
    安装Vue.js之Node.js,NMP环境搭建
  • 原文地址:https://www.cnblogs.com/DengSchoo/p/12606915.html
Copyright © 2011-2022 走看看