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. AVAudioRecorder 录制音频

    AVFoundation 中使用AVAudioRecorder 类添加音频录制功能是非常简单的, AVAudioRecorder构建与Audio Queue Services之上是一个功能强大且代码简 ...

  2. CANVAS运用-对图片的压缩上传(仅针对移动浏览器)

    最近在移动端设计头像上传功能时,原本是以<input type="file">直接通过formData上传,然而实际使用情况是:对于过大的图片(高像素手机所拍摄的照片等 ...

  3. SQL注入原理一

    SQL注入的成因 所谓SQL注入,就是通过把SQL命令插入到Web表单提交.页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.根据所注入对象的类型不同,SQL注入分为三类: (1) 变量是 ...

  4. Kinetic使用注意点--blob

    new Blob(config) 参数: config:包含所有配置项的对象. { points: "存放路径点的数组,可以用一层数组[a,b,c,d].二层数组[[a,b],[c,d]]或 ...

  5. C#微信登录-电脑版扫描二维码登录

    像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 一.创建网站应用 在微信开放平台创建一个网站应用 https:// ...

  6. Unity3d Shader开发(五)Fallback ,Category

    Fallback定义在所有子着色器后.简单来说,它表示"如果没有任何子着色器能被运行在当前硬件上,请尝试使用降级着色器". Syntax 语法 Fallback "nam ...

  7. Unity3d Shader开发(四)UsePass ,GrabPass ,SubShader Tags

    (一)UsePass 命令 使用 来自另一个着色器的命名通道. Syntax 语法 UsePass "Shader/Name" 插入所有来自给定着色器中的给定名字的通道.Shade ...

  8. Jetty使用

    目标:在Linux以及Windows下面配置应用: 之前使用过smartfox,安装的时候弹出一个浏览器,一路next,印象很深刻.只是记得他是使用Jetty.最近做的项目也是需要进行配置:过往都是使 ...

  9. 移动js

    http://blog.sina.com.cn/s/blog_6553196001015672.html http://blog.sina.com.cn/s/blog_6553196001014vjb ...

  10. linux0.11下的中断机制分析

    http://orbt.blog.163.com/     异常就是控制流中的突变,用来响应处理器状态中的某些变化.当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表,进行一个间接过程调用, ...