标签:它的 rcu 重复 完整 就是 ++ 分解 stdio.h start
func FullPermutationCycle(in string) (ret []string) { num := len(in) orgIns := []byte(in) var reslut [][]byte for i := 0; i < num; i++ { reslut = append(reslut, []byte{orgIns[i]}) //插入的第一个元素,依次可以为字符串中的每个字符 } fmt.Printf("%v\n", reslut) for i := 1; i < num; i++ { //依次遍历后续可插入的位置,并同时依次查询已经插入的字符中是否已经存在该字符,如果已经存在,就不插入了,否则可以插入字符 //记录一个存储的中间过程 var midRelsut [][]byte for _, existV := range reslut { //取已经插入的字符出来,进行判断 for j := 0; j < num; j++ { //对输入的字符,进行遍历 if !bytes.Contains(existV, []byte{orgIns[j]}) { //如果不包含这个字符,就插入 tmp := make([]byte, len(existV)) copy(tmp, existV) tmp = append(tmp, orgIns[j]) midRelsut = append(midRelsut, tmp) } } } reslut = midRelsut } fmt.Printf("=====%v\n", reslut) //转换为字符串 for _, cur := range reslut { strCur := string(cur) ret = append(ret, strCur) } return }
func main() { per := FullPermutationCycle("abc") fmt.Printf("%v", per) }
#include<stdio.h> #include<string> //交换两个字符 void Swap(char *a ,char *b) { char temp = *a; *a = *b; *b = temp; } //递归全排列,start 为全排列开始的下标, length 为str数组的长度 void AllRange(char* str,int start,int length) { if(start == length-1) { printf("%s\n",str); } else { for(int i=start;i<=length-1;i++) { //从下标为start的数开始,分别与它后面的数字交换 Swap(&str[start],&str[i]); AllRange(str,start+1,length); Swap(&str[start],&str[i]); } } } void Permutation(char* str) { if(str == NULL) return; AllRange(str,0,strlen(str)); } void main() { char str[] = "abc"; Permutation(str); }
#include<stdio.h> #include<string> //交换两个字符 void Swap(char *a ,char *b) { char temp = *a; *a = *b; *b = temp; } //在 str 数组中,[start,end) 中是否有与 str[end] 元素相同的 bool IsSwap(char* str,int start,int end) { for(;start<end;start++) { if(str[start] == str[end]) return false; } return true; } //递归去重全排列,start 为全排列开始的下标, length 为str数组的长度 void AllRange2(char* str,int start,int length) { if(start == length-1) { printf("%s\n",str); } else { for(int i=start;i<=length-1;i++) { if(IsSwap(str,start,i)) { Swap(&str[start],&str[i]); AllRange2(str,start+1,length); Swap(&str[start],&str[i]); } } } } void Permutation(char* str) { if(str == NULL) return; AllRange2(str,0,strlen(str)); } void main() { char str[] = "abb"; Permutation(str); }
#include<stdio.h> #include<string.h> void Combination(char *str) { if(str == NULL) return ; int len = strlen(str); int n = 1<<len; for(int i=1;i<n;i++) //从 1 循环到 2^len -1 { for(int j=0;j<len;j++) { int temp = i; if(temp & (1<<j)) //对应位上为1,则输出对应的字符 { printf("%c",*(str+j)); } } printf("\n"); } } void main() { char str[] = "abc"; Combination(str); }
标签:它的 rcu 重复 完整 就是 ++ 分解 stdio.h start
原文地址:https://www.cnblogs.com/lihaiping/p/9525870.html