首页 > 代码库 > 求一个序列的所有组合
求一个序列的所有组合
在C++ STL标准模板库中已经有线程的思想,这样就是介绍STL中的思想。
其实也可以使用递归的方法解决,后续问题,STL中的方法也解决了有重复字符的问题。
思路:
借助了字典序的方法,首先将序列按照升序进行排序(当然也可以使用降序排列,都是一样的道理),将这个序列作为一个字典序的输入序列,从这个字典序如何变换出下一个字典序列呢?对这个序列从后往前进行搜索,找到一对相邻的升序元素,元素的位置分别为i和j(i<j)。如果能找到这样的一对元素,说明所有的组合还存在,如果没有找到这样的一对元素,说明所有的组合都已经找到,算法结束。如果找到了这样的一对元素,那么继续从后往前找到第一个符合条件的元素,使得此元素大于第i个元素,此元素的位置为k,那么交换第i个元素和第k个元素,然后将从第j个元素到最后一个元素进行反转,这样得到的一个序列就是下一个输入的字典序列。
程序代码
#include <stdio.h> #include <stdlib,h> #include <string.h> //反转元素 void reserve(int begin,int end.char* str) { while(begin < end) { char temp = str[begin]; str[begin] = str[end]; str[end] = temp; begin++; end++; ] ] //交换两个元素 void swap(char* src,char* dest) { char temp = *src; *src = http://www.mamicode.com/*dest;>求一个序列的所有组合
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。