我是靠谱客的博主 淡然薯片,最近开发中收集的这篇文章主要介绍选择排序字母串算法c语言,字符串的组合算法问题的C语言实现攻略,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

基本字符串组合问题

题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。

上面我们详细讨论了如何用递归的思路求字符串的排列。同样,本题也可以用递归的思路来求字符串的组合。

假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:第一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;第二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种选择都很容易用递归实现。下面是这种思路的参考代码:

?

由于组合可以是1个字符的组合,2个字符的字符……一直到n个字符的组合,因此在函数void Combination(char* string),我们需要一个for循环。另外,我们用一个vector来存放选择放进组合里的字符。

方法二:用位运算来实现求组合

?

全组合

例如给定字符串“abc”,全组合意思从中去0个元素,1个元素,一直到n个元素,介绍二进制做法。以字符串“abc”为例:

000 NULL

001 c

010 b

011 bc

100 a

101 ac

110 ab

111 abc

思路出来了,代码也比较好写,分享一下我的代码:

?

从n中选m个数

这里分为两种方法:递归和回溯

递归

递归思路如下,从n个数中取出m个数,可以分解为以下两步:

从n个数中选取编号最大的数,然后在剩下的n-1个数中选取m-1个数。直到从n-(m-1)中选取一个数为止

从n个数中选取次小的数,重复1的操作

代码如下:

?

DFS

其实考虑到用dfs,这道题目就简单很多,dfs的回溯条件就是临时数组的大小==k即可,同时附加一道LeetCode上的题目,用dfs思路ac

题目

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

For example,

If n = 4 and k = 2, a solution is:

1-210305152601424.jpg

ac代码

?

最后

以上就是淡然薯片为你收集整理的选择排序字母串算法c语言,字符串的组合算法问题的C语言实现攻略的全部内容,希望文章能够帮你解决选择排序字母串算法c语言,字符串的组合算法问题的C语言实现攻略所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部