递归处理数字全排列算法

问题背景###

递归很常用,但确实不好理解,下边这段程序是用来进行数字全排列的 由于很多算法需要讲数字全排列后再来暴力求解问题,所以学会数字的全排列还是很有意义的 比如,讲1、2全排列后是1 2 和2 1

直接上java代码###

package permuta;

import java.util.Scanner;

public class Permutation {

    public static void permutation(int n,int A[],int cur){
        
        int i,j;
        //如果一旦验证满了n位数,就将这个数打印出来
        if(cur==n){
            for(i=0;i<n;i++)
            System.out.print(A[i]);
            System.out.println("\n");
            return ;
        }
        
        for(i=1;i<=n;i++){      
            int ok=1;
            for(j=0;j<cur;j++){
                if(A[j]==i)
                    ok=0;
            }
            //从左边位数开始放数,如果这个位数没有放过,这个位置就放i,放完之后的事就递归,交给别人去干了,就可以考虑下一个位数了
            if(ok==1){
                A[cur]=i;
                permutation(n, A, cur+1);//递归
            }
        }
        
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int n,cur=0;
        int A[]={1,2,3,4,5,6,7,8,9};
        System.out.println("请输入你要全排列的个数");
        Scanner scanner=new Scanner(System.in);
        n=scanner.nextInt();
        permutation(n, A, cur);
    }

}

运行结果###

(http://upload-images.jianshu.io/upload_images/3403753-0b95f6d56af6b7ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏书山有路勤为径

栈与队列基础知识

栈,是先进后出的线性表,标准STL的栈包括如下5种操作,设栈S: 1.取出栈顶元素:S.top(); 2.判断栈是否为空:S.empty(); 3.将元素...

9320
来自专栏iOS技术杂谈

iOS @property探究(一): 基础详解你要知道的@property都在这里

你要知道的@property都在这里 本文大纲 Apple Adopting Modern Objective-C翻译 @property基本用法 @prope...

44490
来自专栏Java学习123

40个你可能不知道的Python的特点和技巧

282100
来自专栏诸葛青云的专栏

C语言位运算的妙用你知道多少?

位运算在驱动开发中是经常遇到的,尤其是置0和置1。既要指定的位数发生变化,又不能改变其它位的值,还要高效率的编写代码,这时候技巧就很重要了。在位运算中有几个符号...

25340
来自专栏一个会写诗的程序员的博客

《Kotlin极简教程》第3章 Kotlin语言基础第3章 Kotlin语言基础《Kotlin极简教程》正式上架:参考资料

学习任何东西,都是一个由表及里的过程。学习一门编程语言也一样。对于一门编程语言来说,“表” 就是基本词汇(关键字、标识符等)、句子(表达式)和语法。

14820
来自专栏程序员宝库

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解

该项目来自于 Github 用户 Chalarangelo,目前已在 Github 上获得了 5000 多Star,精心收集了多达 48 个有用的 JavaSc...

380120
来自专栏進无尽的文章

Swift| 基础语法(四)

总结下 swift下的基础语法,里面涉及到:常量&变量、Swift中的数据类型、逻辑分支、循环、字符串相关、数组和字典、方法的书写调用等内容,考虑到阅读体验分多...

18110
来自专栏Script Boy (CN-SIMO)

自动类型转换、强制类型转换、作用域、整型表数范围

一、变量的作用域 测试代码: public class Test1 { private static int value = 1; // 全...

21000
来自专栏二进制文集

LeetCode 473 Matchsticks to Square

Remember the story of Little Match Girl? By now, you know exactly what matchstic...

12230
来自专栏java学习

面试题7(考察运算符的优先级)

请选择下面代码运行后打印的结果。 public static void main(String[]args){ int x=5; int y=3; x=x+(x...

35580

扫码关注云+社区

领取腾讯云代金券