1.无重复排列

2.有重复排列

3,下一个排列

package 生成排列;

public class Main {
static int count=0;
//a中保存原来的排列,lev表示选定第几个数,len是长度
public static void swap(int a[],int lev,int i)
{
int temp=a[lev];
a[lev]=a[i];
a[i]=temp; }
public static void swap(char a[],int lev,int i)
{
char temp=a[lev];
a[lev]=a[i];
a[i]=temp; } public static void reverse(char c[],int low,int high)
{
int l=low;
int h=high;
while(l<h)
{
swap(c,l,high);
l++;
h--; } }
//利用交换法,获得排列
public static void perm(int a[],int lev,int len)
{
if(lev==len)
{
for(int i=0;i<len;i++)
{
System.out.print(a[i]); } count++;
}
else
{
for(int i=lev;i<len;i++)
{
swap(a,lev,i);
perm(a,lev+1,len);
swap(a,lev,i); } } }
//带有重复数字的排列 public static void perm2(int a[],int lev)
{
if(lev==a.length)
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]); }
System.out.println();
count++;
}
else
{
boolean tf=true;
for(int j=lev;j<a.length;j++)
{
//对于重复的数据不再交换
for(int k=lev;k<j;k++)
{
if(a[k]==a[j])
{
tf=false;
break;
}
} if(tf)
{
swap(a,lev,j);
perm2(a, lev+1);
swap(a,lev,j);
} } } } //下一个排列 STl
public static boolean nextPerm(char c[]) //输入原始序列
{ //找到替换点
int i=c.length -2;
while(i>=0&&c[i]>=c[i+1])
{
i--;
}
if(i<0) //说明是最后一个数,翻转后
{
reverse(c,0,c.length-1);
return false; }
else
{
//否则的话,找到替换点
//从右边开始找到第一个大于c[i]的位置
int j=c.length-1;
while(c[j]<=c[i])
{
j--; }
//交换两个值
swap(c,i,j); reverse(c,i+1,c.length -1);
return true; } }
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]={1,1,1,1,1};
perm2(a,0);
System.out.println(count);
char c[]="1234".toCharArray();
int count=1;
/* while(nextPerm(c))
{ System.out.println(c);
count++;
}
System.out.println(count);*/ } }

排列的学习(java)的更多相关文章

  1. 程序员带你学习安卓开发,十天快速入-对比C#学习java语法

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  2. 如何才能够系统地学习Java并发技术?

    微信公众号[Java技术江湖]一位阿里Java工程师的技术小站 Java并发编程一直是Java程序员必须懂但又是很难懂的技术内容. 这里不仅仅是指使用简单的多线程编程,或者使用juc的某个类.当然这些 ...

  3. 零基础如何学习java更有效呢?

    零基础学java,不知道该如何入手?也不知道学习的方向,很多人会问零基础怎么样学习,有没有什么入门的书籍推荐:只要方法正确,零基础学好java也是有机会的哦. 一.理解Java思想 Java是一门面向 ...

  4. 积极主动敲代码,使用Junit学习Java程序设计

    积极主动敲代码,使用JUnit学习Java 早起看到周筠老师在知乎的回答软件专业成绩很好但是实际能力很差怎么办?,很有感触. 从读大学算起,我敲过不下100本程序设计图书的代码,我的学习经验带来我的程 ...

  5. 如何接触学习java

    信息科技必将是未来的潮流,Java语言必将在时代的进步中发挥不可估量的作用,未来,掌握好一门实用而且有良好应用前景的技术是你们的首要任务. 零基础怎么学Java 多年Java教育培训经验事实表明,零基 ...

  6. 零基础如何系统学习Java Web

    零基础如何系统学习Java Web?   我来给你说一说 你要下决心,我要转行做开发,这样你才能学成. 你要会打字,我公司原来有一个程序员,打字都是两个手一指禅,身为程序员你一指禅怎么写出的代码,半个 ...

  7. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  8. 《疯狂Java讲义》(一) ---- 关于学习Java的反思

    "听到Spring很火,就立马买来一本Spring的书来读,最后结果往往是失败,因为这种学习没有积累,没有根基,学习过程中困难重重,每天都被一些相同.类似的问题所困扰,起初热情十足,经常上论 ...

  9. 十天来学习java的心得体会

    有关学习java是几天来的心得体会: 十天学习java遇到很多问题,每个问题都是经过反复的看书本以及上网查找资料来解决的,发现这一点真的需要自己来而不是去遇到什么问题就去依靠他人(师兄.同学).在其中 ...

  10. 【转】学习JAVA的步骤

      好东西大家分享: JAVA学习的一些重点 . Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的 ...

随机推荐

  1. 【分享】 高级Visual Basic 编程 清晰pdf+随书源代码光盘

    搞vb6的可能不多,博客园也大多是.net java,近日在网上找到这本好书,想要成为vb高手,这本书不要错过,学完你会发现win32下,vb6还真是无所不能.可贵的是本书的作者是当时vb6 IDE的 ...

  2. linux点滴:rsync

    rsync(remote sync)是一款远程同步工具,可以实现全量备份.增量备份.本地备份.删除,核心功能是远程数据备份. 工作原理 rsync核心算法 1.分块checksum算法 首先,把文件平 ...

  3. wpf单实例运行

    默认情况下我们可以打开一个应用程序多个实例,例如你双击一个exe多次.当然有些时候这么做会带来很多好处,但是有时我们又不希望这么做,要避免这个问题其实很简单,同WinForm中单实例运行一个应用是一样 ...

  4. Cent OS 常用 命令

    1.开机自动联网操作 需要root权限 vim /etc/sysconfig/network-scripts/ifcfg-p4p1(p4p1 为网络链接名称)这个文件, 把ONBOOT="n ...

  5. linux sed 批量替换多个文件中的字符

    格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` linux sed 批量替换多个文件中的字符串 sed -i "s/oldst ...

  6. .net faq

    http://www.indiabix.com/technical/dotnet/ http://www.codeproject.com/Articles/637480/Csharp-and-ASP- ...

  7. 1行代码为每个Controller自定义“TabBar”-b

    这篇文章大致会带你实现以下的功能,废话少说,先看东西: JPNavigationController.gif Q&A:Demo里都有那些东西? 01.关于自定义导航栏 01.第一个控制器的导航 ...

  8. jna 使用实例,

    有与项目组需要用到C++的一个模块, 需要将一个2维数组传到dll 里面 ,返回一个字符串, 恶心了1天终于完成了, 记录一下,同时也希望能给你带来帮助. java 代码如下, package tes ...

  9. Java 代码优化过程的实例介绍

    衡量程序的标准 衡量一个程序是否优质,可以从多个角度进行分析.其中,最常见的衡量标准是程序的时间复杂度.空间复杂度,以及代码的可读性.可扩展性.针对程序的时间复杂度和空间复杂度,想要优化程序代码,需要 ...

  10. hdu 3487

    splay #include<cstdio> #include<cstring> #include<iostream> #include<algorithm& ...