博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排列与组合
阅读量:4450 次
发布时间:2019-06-07

本文共 3078 字,大约阅读时间需要 10 分钟。

组合:

public class Solution {    static int  count = 0;    static void findSo(String soFar,String rest) {        if(soFar.length() == 3){            count++;            System.out.println(soFar);        }else{            for(int i=0; i

结果:

123124125126127134135136137145146147156157167234235236237245246247256257267345346347356357367456457467567count:35

C++版本

#include 
#include
#include
using namespace std;int count;void findSo(string soFar, string rest) { if (soFar.length() == 3) { count++; cout<
<

 

排列:

public class Solution {    static int count = 0;    static void findSo(String soFar, String rest) {        if (soFar.length() == 3) {            count++;            System.out.println(soFar);        } else {            for (int i = 0; i < rest.length(); i++) {                String now = soFar + rest.charAt(i);                String remain = rest.substring(0,i) + rest.substring(i + 1);                findSo(now, remain);            }        }    }    public static void main(String[] args) {        String str = "1234567";        findSo("", str);        System.out.println("count:" + count);    }}

for循环里面的代码也可以和组合一样

       for (int i = 0; i < rest.length(); i++) {                String now;                if (soFar.length() < 3) {                    now = soFar + rest.charAt(i);                } else {                    now = soFar;                }                String remain = rest.substring(0, i) + rest.substring(i + 1);                findSo(now, remain);            }

 

结果:

123124125126127132134135136137142143145146147152153154156157162163164165167172173174175176213214215216217231234235236237241243245246247251253254256257261263264265267271273274275276312314315316317321324325326327341342345346347351352354356357361362364365367371372374375376412413415416417421423425426427431432435436437451452453456457461462463465467471472473475476512513514516517521523524526527531532534536537541542543546547561562563564567571572573574576612613614615617621623624625627631632634635637641642643645647651652653654657671672673674675712713714715716721723724725726731732734735736741742743745746751752753754756761762763764765count:210
View Code

 C++版本:

#include 
#include
#include
using namespace std;int count;void findSo(string soFar, string rest) { if (soFar.length() == 3) { count++; cout<
<

 从 m个元素中去n个元素的排列和组合差别仅仅在于

排列  string remain = rest.substr(0,i)+rest.substr(i + 1);

组合  string remain = rest.substr(i + 1);

所以组合代码也可以是:

#include 
#include
#include
using namespace std;int count;void findSo(string soFar, string rest){ if (soFar.length() == 3) { count++; cout<
<

 ps:

 抽象的想一下 以1 2 3 4 5 6 7为例
for循环刚进来 递归肯定会得到7个 大分支
不好意思,他现在先要处理第一个分支
即("1","2,3,4,5,6,7)   在这个分支下不断的分
递归每得到一个分支就要穷尽这个分支
穷尽之后在返回到父节点的相邻分支 继续穷尽 

 

 

转载于:https://www.cnblogs.com/hixin/p/4788097.html

你可能感兴趣的文章
数据表改变之后数据的迁移
查看>>
雷林鹏分享:Ruby 环境变量
查看>>
掉书袋的东东,我喜欢。。。
查看>>
通过MYSQL命令行直接建数据库
查看>>
safari 插件安装之alipay
查看>>
【语言处理与Python】3.3使用Unicode进行文字处理
查看>>
python+senium+chrome的简单爬虫脚本
查看>>
CoronaSDK场景管理库:Composer library (上)
查看>>
Go语言程序结构
查看>>
自定义圆形头像
查看>>
JavaScript&jQuery.动态创建元素
查看>>
WebBrowser记录
查看>>
什么是FreeMaker
查看>>
设计模式学习笔记(总结篇:模式分类)
查看>>
算法笔记_075:蓝桥杯练习 最短路(Java)
查看>>
TCP的三次握手/建立连接
查看>>
Python 教程阅读笔记(一):使用解释器
查看>>
运算符重载
查看>>
SDWebImage 新版接口使用方法
查看>>
简单的jQuery检测注册用户名
查看>>