• 字符串全部组合


    【问题】

    输入一个字符串。输出该字符串中字符的全部组合。举个样例。假设输入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;  
    }  

  • 相关阅读:
    leetcode1046
    leetcode1041
    leetcode1042
    leetcode399
    【经验分享】数据科学与机器学习面试指南
    计算机视觉计算任务有哪些,怎么分类 ?
    超详细!上线一个机器学习项目你需要哪些准备?
    人工智能和机器学习的前世今生
    机器学习从业人员到底做什么?
    两年AI研究经验(教训)总结,进来看看吧!
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7263111.html
Copyright © 2020-2023  润新知