文档章节

全排列

柠檬味的猫咪
 柠檬味的猫咪
发布于 2015/06/06 13:34
字数 470
阅读 11
收藏 0

给定任意的不重复字符:a、 b、 5、3、Z , 通过程序得到所有字符可能的组合情况。

规律:

 第1(i=0)轮:
       得到:排列长度为1的字符串:  
       这一次可得到: (上一轮字符串的个数)*(给定字符的个数-i)
        "a" , "b" , "5" , "3" , "Z"

      第2(i=1)轮:
       得到:排列长度为2的字符串,方法:用一轮得到的字符串和给定的每个字符都组合一次。
       这一次可得到: (上一轮字符串的个数)*(给定字符的个数-i)

      第3(i=2)轮:
       得到:排列长度为3的字符串,方法:用一轮得到的字符串和给定的每个字符都组合一次。
       这一次可得到: (上一轮字符串的个数)*(给定字符的个数-i)
    
      第5(i=4)轮:
      得到: 排列长度为5的字符串,方法:用一轮得到的字符串和给定的每个字符都组合一次。
       这一次可得到: (上一轮字符串的个数)*(给定字符的个数-i)

public class 排列
{
    public static void main(String[] args)
    {
        String[] chars = new String[]{"a", "b", "5", "3", "Z" , "C" , "X"};

        String[] prevStrArr = new String[]{""};  // 初始一个长度为0的字符串
        // i控制正在进行第几轮
        for(int i = 0 ; i < chars.length ; i ++)
        {
            // 每一轮得到的字符串的个数:(上一轮字符串的个数)*(给定字符的个数-i)
            String[] tmp = new String[prevStrArr.length * (chars.length - i)];
            int count = 0 ;
            for(int j = 0 ; j < prevStrArr.length ; j++)
            {
                for(int k = 0 ; k < chars.length ; k++)
                {
                    // 如果result字符串没有包含chars[k],就可以进行组合
                    if(! prevStrArr[j].contains(chars[k]) )
                    {
                        // 用result每个字符串, 与chars中每个字符都组合一次。
                        tmp[count++] = prevStrArr[j] + chars[k];
                    }
                }
            }
            prevStrArr = tmp;
        }

        System.out.println(Arrays.toString(prevStrArr));
        System.out.println(prevStrArr.length);
    }
}


© 著作权归作者所有

下一篇: 环形矩阵
柠檬味的猫咪
粉丝 1
博文 12
码字总数 2030
作品 0
广州
后端工程师
私信 提问
STL系列之十 全排列(百度迅雷笔试题)

全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,...

长平狐
2012/12/10
79
0
【万能搜索】万能DFS之全排列(一)——普通算法

DFS相信大家都很熟悉,下面就给出一种用DFS实现的算法。 全排列 大家对于全排列是很熟悉的,比如123的全排列就有: 123 132 213 231 312 321 这六种。 现在,我们来设计一个算法,来求出所有...

qq_37656398
2017/12/03
0
0
STL系列之十 全排列(百度迅雷笔试题)

全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,...

彭博
2012/04/12
500
0
全排列 Permutations

问题: Given a collection of distinct numbers, return all possible permutations. For example, have the following permutations: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] ......

叶枫啦啦
2017/09/04
7
0
算法题丨Next Permutation

描述 Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers. If such arrangement is not possible, it must rearrange ......

lancel0t
2018/04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

作为一个(IT)程序员!聊天没有话题?试试这十二种技巧

首先呢?我是一名程序员,经常性和同事没话题。 因为每天都会有自己的任务要做,程序员对于其他行业来说;是相对来说比较忙的。你会经常看到程序员在发呆、调试密密麻麻代码、红色报错发呆;...

小英子wep
今天
15
0
【SpringBoot】产生背景及简介

一、SpringBoot介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要...

zw965
今天
5
0
简述并发编程分为三个核心问题:分工、同步、互斥。

总的来说,并发编程可以总结为三个核心问题:分工、同步、互斥。 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共...

dust8080
今天
6
0
OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3.4K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部