剑指offer-拓展训练-字符的所有组合-全组合

Posted buaazhhx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-拓展训练-字符的所有组合-全组合相关的知识,希望对你有一定的参考价值。

/*
题目:
	给定不含重复字符字符串的全组合。
*/
/*
思路:
	递归法。
	例给定abc,输出的组合长度为1,2,3.
	对于长度为2的组合,分选择a(ab,ac)和不选择a的情况(bc)。
	选择a,则在剩余字符串中选择长度为1的字符组合;
	不选择a,则在剩余字符串中选择长度为2的字符组合。
*/
#include<iostream>
#include<stdio.h>
#include<string>

using namespace std;

string curr;

void combination(string str,int len,int beginIndex){
	//当遍历到字符串的末尾,但所需长度不够,直接返回。
    if(beginIndex == str.size()  && len != 0){
        return;
    }
	//当长度足够,则输出当前字符串。
    if(len == 0 ){
        cout<<curr<<" ";
    }else{
		//选择当前字符串的情况
        curr+=(str[beginIndex]);
        combination(str,len-1,beginIndex+1);
		//不选择当前字符串的情况
        curr.erase(curr.size()-1);
        combination(str,len,beginIndex+1);
    }
}

int main(){
    string str;
    while(getline(cin,str)){
        if(str == "")
            cout<<endl;
        else{
            for(int len = 1; len <= str.size(); len++){
                combination(str,len,0);
                cout<<endl;
            }

        }

    }

}

   

以上是关于剑指offer-拓展训练-字符的所有组合-全组合的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer-字符的所有组合,复制复杂链表,二叉树中和为某一值的路径

剑指Offer对答如流系列 - 把数组排成最小的数

剑指 Offer II 082. 含有重复元素集合的组合

LeetCode1269. 停在原地的方案数 / 剑指 Offer 38. 字符串的排列 / 216. 组合总和 III / 剑指 Offer 39. 数组中出现次数超过一半的数字/229. 求众数(

Leetcode刷题Python剑指 Offer II 082. 含有重复元素集合的组合

《剑指offer》面试题28:字符串排序(牛客网版本) java