zoukankan      html  css  js  c++  java
  • 字符串全部组合

    【问题】

    输入一个字符串。输出该字符串中字符的全部组合。举个样例。假设输入abc,它的组合有a、b、c、ab、ac、bc、abc。


    【分析解法1】

    对于字符串中每一个字符。仅仅有两种情况:一种就是出如今组合中,一种是不出如今组合中。

    【代码】

    void combination(char *str, char *res, int strPos, int resPos, int size)
    {
    	if (strPos == size) {
    		res[resPos] = '';
    		printf("%s
    ", res);
    		return;
    	}
    	combination(str, res, strPos+1, resPos, size);//str[strPos]不出如今组合中。

    res[resPos] = str[strPos]; combination(str, res, strPos+1, resPos+1, size);//str[strPos]出如今组合中。

    }

    【分析解法2(网上转载)】

    如果我们想在长度为n的字符串中求m个字符的组合。

    我们先从头扫描字符串的第一个字符。

    针对第一个字符,我们有两种选择:第一是把这个字符放到组合中去。接下来我们须要在剩下的n-1个字符中选取m-1个字符;第二是不把这个字符放到组合中去,接下来我们须要在剩下的n-1个字符中选择m个字符。

    这两种选择都非常easy用递归实现。

    以下是这样的思路的參考代码:

    #include<iostream>  
    #include<vector>  
    #include<cstring>  
    using namespace std;  
    #include<assert.h>  
      
    void Combination(char *string ,int number,vector<char> &result);  
      
    void Combination(char *string)  
    {  
        assert(string != NULL);  
        vector<char> result;  
        int i , length = strlen(string);  
        for(i = 1 ; i <= length ; ++i)  
            Combination(string , i ,result);  
    }  
      
    void Combination(char *string ,int number , vector<char> &result)  
    {  
        assert(string != NULL);  
        if(number == 0)  
        {  
            static int num = 1;  
            printf("第%d个组合	",num++);  
      
            vector<char>::iterator iter = result.begin();  
            for( ; iter != result.end() ; ++iter)  
                printf("%c",*iter);  
            printf("
    ");  
            return ;  
        }  
        if(*string == '')  
            return ;  
        result.push_back(*string);  
        Combination(string + 1 , number - 1 , result);  
        result.pop_back();  
        Combination(string + 1 , number , result);  
    }  
      
    int main(void)  
    {  
        char str[] = "abc";  
        Combination(str);  
        return 0;  
    }  

  • 相关阅读:
    python Database Poll for SQL SERVER
    SQLAlchemy表操作和增删改查
    flask动态url规则
    flask配置管理
    一个Flask运行分析
    Function Set in OPEN CASCADE
    Happy New Year 2016
    Apply Newton Method to Find Extrema in OPEN CASCADE
    OPEN CASCADE Multiple Variable Function
    OPEN CASCADE Gauss Least Square
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7263111.html
Copyright © 2011-2022 走看看