编程之法:字符串的排列组合

这篇博客探讨了如何使用递归算法解决字符串的排列和组合问题。首先,介绍了字符串排列的问题,通过递归算法实现,分别给出了两个不同的题目及其解决方案,并展示了运行结果。接着,讨论了字符串组合的计算,同样利用递归方法,分析了解题思路并提供了代码示例,列举了运行结果。
摘要由CSDN通过智能技术生成

一、排列

题目一

输入一个字符串,打印出该字符串中字符的所有排列。例如,输入字符串“abc”,则输出由字符’a’、’b’、’c’所有排列出来的所有字符串”abc”、”acb”、”bac”、”bca”、”cab”和”cba”。

思路

从每个子串的第二个字符开始,依次与第一个字符交换,然后继续处理子串。也就是一个递归算法。如图所示(图是在网上找的):
这里写图片描述
另外,还要注意所给字符串中有重复字符的情况,可以增加一个函数进行判断。

代码

//
// Created by huxijie on 17-3-18.
// 字符串的全排列

#include <iostream>
using namespace std;

//交换字符
void Swap(string &src,int a,int b) {
    if (a < 0 || a >= src.length() || b < 0 || b >= src.length()) {
        cout<<"out of range"<<endl;
        return;
    } else {
        char s = src.at(a);
        src[a] = src.at(b);
        src[b] = s;
    }
}

//判断字符中在k-1之前是否有字符和k处字符相同,是则说明不用交换此字符了,因为前面一定已经处理过该相同字符了
bool IsDuplicated(const string src,int from,int k) {
    int flag = 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值