有1、2、2、3、4、5有一个六位数数,比如512234,412325等,“4”...

不显示删除回复
显示所有回复
显示星级回复
显示得分回复
[推荐]
Re: 一著名软件公司的java笔试算法题!
[问题点数:
,结帖人:java2000_net
等 级:
#201楼 得分:0
回复于:2007-04-16 00:31:24
为什么那么复杂?我的想法是首先能够得到所有排列,然后排除不要的就不打印就OK?
等 级:
#202楼 得分:0
回复于:2007-04-16 10:03:53
(柔情主义)
等 级:
#203楼 得分:0
回复于:2007-04-16 10:38:37
(黑莲居士)
等 级:
#204楼 得分:0
回复于:2007-04-16 10:41:29
等 级:
#205楼 得分:0
回复于:2007-04-17 18:11:59
#include iostream
#include algorithm
#include vector
bool IsAdj(co t int&am x,co t int&am y)
if((x==3&am am y==5)||(x==5&am am y==3))
return true;
return false;
int main()
std::vector int
ia.push_back(1);
ia.push_back(2);
ia.push_back(2);
ia.push_back(3);
ia.push_back(4);
ia.push_back(5);
int icount=0;
if(adjacent_find(ia.begin(),ia.end(), IsAdj)==ia.end())
if(ia[2]!=4)
for(int j=0;j 6;j++)
cout ia[j];
cout endl;
icount++;
while(next_permutation(ia.begin(),ia.end()));
cout Total Numbers: icount endl;
结果是198个.
(克忠)
等 级:
#206楼 得分:0
回复于:2007-04-17 19:22:53
我觉得应该先对1,2,2全排列,然后插入3,5,最后插入4。
这样复杂度很低阿。
等 级:
#207楼 得分:0
回复于:2007-04-17 20:42:04
研究框架,算法,欢迎加入QQ群33397644
(云淡风轻)
等 级:
#208楼 得分:0
回复于:2007-04-19 17:24:46
我认为即使把两个2固定在一起。即对:1,22,3,4,5进行全排列有5^5种。然后4在第3位的情况占1/5,(3,5)表示3和5不能重复,它只占((1,22)(1,3)(1,4)(1,5)(22,3)(22,4)(22,5)(3,4)(3,5)(4,5))的1/10,这样共有(5^5)*(4/5)*(9/10)种,比500还多,结果为什么只有198种?没想通
(清风寥寥)
等 级:
#209楼 得分:0
回复于:2007-04-19 17:36:00
我觉得用递归的效率还不如用穷举法,同时佩服写出递归算法的大侠.我用J***A写了个穷举算法:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
//穷举法
public cla Order {
public static void main(String[] args) {
List list = new ArrayList(); //结果集
Random random = new Random();
for(int i = 0; i 5000; i++){ //穷举5000次
String [] strArr = { 1 , 2 , 2 , 3 , 4 , 5 };
String outStr = " //中间结果
while(outStr.length() != 6){
int number = random.nextInt(6);
if(strArr[number] != null){
outStr += strArr[number];
strArr[number] = null;
//3个校验
if(outStr.indexOf( 35 ) != -1 || outStr.indexOf( 53 ) != -1 || outStr.su tring(2, 3).equals( 4 )){
continue;
//保存结果
if(!list.contai (outStr)){ //不在LIST中就放在LIST中
list.add(outStr);
//输出
System.out.println(list.size());
for(int i = 0; i list.size(); i++){
System.out.println((String)list.get(i));
结果同上:198个.
复杂度N2
(清风寥寥)
等 级:
#210楼 得分:0
回复于:2007-04-20 16:04:30
穷举法似乎是要被淘汰了...呵呵~
等 级:
#211楼 得分:0
回复于:2007-04-21 13:27:56
mark ! 有没有通用程序啊 !
等 级:
#212楼 得分:0
回复于:2007-04-21 13:31:51
这题用 回嗍法是个不错的选择。如果像各位 用int i =122345;i 543221;i++......
这题就失去意义了。。 大家写出程序来的时候,并不是看代码有多少行 而是要算出自己所写出来的程序的时间复杂度+空间复杂度
如果这题 换成 abccde 大家再像这样能行不?
等 级:
#213楼 得分:0
回复于:2007-04-23 22:28:53
经典#89
(LAO拽爺)
等 级:
#214楼 得分:0
回复于:2007-04-23 23:44:50
等 级:
#215楼 得分:0
回复于:2007-04-25 10:14:13
排除重复,用个异常处理,行不行啊?
(自由鸟的天堂)
等 级:
#216楼 得分:0
回复于:2007-04-29 23:32:19
(自由鸟的天堂)
等 级:
#217楼 得分:0
回复于:2007-04-29 23:32:52
(新手)
等 级:
#218楼 得分:0
回复于:2007-05-02 22:34:57
收藏起来 慢慢看。。
(尘埃)
等 级:
#219楼 得分:0
回复于:2007-05-03 10:38:17
study...
(fdasfasfg)
等 级:
#220楼 得分:0
回复于:2007-05-03 13:43:35
(簡簡單單..)
等 级:
#221楼 得分:0
回复于:2007-05-03 18:44:39
等 级:
#222楼 得分:0
回复于:2007-05-03 19:16:07
啊哈!!!
都是强手啊!
好好学习!
支持!!!
(天天)
等 级:
#223楼 得分:0
回复于:2007-05-04 11:48:23
我有个想法,拿走其中的一个2,让他最后插入进行处理,应该会简单一点.
等 级:
#224楼 得分:0
回复于:2007-05-04 12:17:10
等 级:
#225楼 得分:0
回复于:2007-05-04 13:34:54
(一骑绝尘)
等 级:
#226楼 得分:0
回复于:2007-05-04 17:06:12
收藏,高手啊
(学习中)
等 级:
#227楼 得分:0
回复于:2007-05-04 21:44:11
光看了题目,我也来一个吧,我的思想是用加法运算模拟,如122345下一个就是122354,用一个数组控制它就避免了一个一个累加的可能,控制数组是[121111],因为2有两个!至于什么4不能在中间,35不能在一块,最后把它刨去便是!
/** * 原题如下:用1、2、2、3、4、5这六个数字,用java写一个main函数, * 打印出所有不同的排列,如:512234、412345等,要求: 4 不能在第三位, * 3 与 5 不能相连. * 122345 * 122354 * 122435 * 122453 * 122534 * 122543 * 123245 * 123254 * 123452 */
public cla CalNumber {
private int[] num;
private static int canRepeatNum =2;
private static int max = 5;
private void clear(){
for (int i = 1; i num.length; i++) {
num[i] = 1;
num[2]=2;
System.out.println( num +this.getArrString(num));
private void init(){
num = new int[7];
this.clear();
} /** * 取得比它大的可用的数字 * @param x 当前的数字 * @param beginNum 开始位置 * @return */
private int getNum(int x,int beginNum){
int result=2;
for (int i = beginNum; i num.length; i++) {
if (num[i]==0) {
num[i]++;
result= i;
else if ((i==canRepeatNum)&am am (num[i] 2)&am am (x!=canRepeatNum)) {
//如果是可重复的2
num[i]++;
result= i;
return result;//默认是2
/** * 从它开始找比它大的 * @param x * @return */
private int getNextNum(int x){
return this.getNum(x, x);
/** * 返回正确的序号 * 这不一定必须大于它,比如2很特殊 * @return */
private int getUsefulNum(int x){
return this.getNum(x, 1);
/** * 判断此位置是否可以中止循环 * @param x * @return */
private boolean isCando(int x){
boolean result = false;
for (int i = x; i num.length; i++) {
if (num[i]==0) {
result= true;
else if ((i==canRepeatNum)&am am (num[i] 2)&am am (x!=canRepeatNum)) {
//如果是可重复的2
result= true;
return result;
public void play() {
this.init();
this.list();
/** * 设置当前数组可用 * @param x */
private void setUsefulNum(int x){
if (num[x] 0) {
num[x]--;
private String getArrString(int[] a){
StringBuffer sf =new StringBuffer();
for (int i = 1; i a.length; i++) {
sf.a end(a[i]);
return sf.toString();
private void list(){
int i,po int[] a = new int[7];
a[0]=0;
a[1]=1;
a[2]=2;
a[3]=2;
a[4]=3;
a[5]=4;
a[6]=5;
int count = 1;
System.out.println(count+ : +this.getArrString(a));
while (true) {
while( (!this.isCando(a[pos]) ) &am am (po gt; -1) ){
this.setUsefulNum(a[pos]);
if (pos==0) {
i =a[pos];
a[pos] = this.getNextNum(a[pos]);
this.setUsefulNum(i);//当前位置设置成可用
for ( i = pos+1; i a.length; i++) {
a[i] = this.getUsefulNum(1);
if (this.canOutPut(a)) {
count++;
System.out.println(count+ : +this.getArrString(a));
System.out.println( ------------------------- );
pos = 6;
private boolean canOutPut(int[] a){
boolean result = true;
if (4==a[3]) {
return false;
for (int i = 1; i a.length-1; i++) {
if ((a[i]==3&am am a[i+1]==5)||(a[i]==5&am am a[i+1]==3)) {
return false;
return result;
public static void main(String[] args) {
CalNumber c =new CalNumber();
c.play();
等 级:
#228楼 得分:0
回复于:2007-05-04 23:34:28
有这样的思路: 感觉就是一个填空题目的呀!~
等 级:
#229楼 得分:0
回复于:2007-05-09 10:47:00
等 级:
#230楼 得分:0
回复于:2007-05-09 13:00:46
不错,来学习!
等 级:
#231楼 得分:0
回复于:2007-05-11 16:00:15
(我是猪,我很乖!)
等 级:
#232楼 得分:0
回复于:2007-05-12 04:25:15
我是菜鸟,我J***A刚学
原题如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求: 4 不能在第三位, 3 与 5 不能相连.
首先我觉得题目给了这几个数据一定有他的意思,我的思路是这样的 写个递归生成
根据要求 我们发现4不出现在第三位很容易做到,, 3 与 5 不能相连 是什么意思呢·~ 就是说3+5=8那就是说相邻的2个数字的和不是8,只要我们生成的时候判断下一个即将出现的数字和已经出现的数字的和不等于8,不就可以了吗? 我觉得这样做算法不难,而且效率一定很快~~
(我是猪,我很乖!)
等 级:
#233楼 得分:0
回复于:2007-05-12 04:26:49
不知道我理解的对不对,谁能实现算法的加我QQ:31545263
(我是猪,我很乖!)
等 级:
#234楼 得分:0
回复于:2007-05-12 04:42:31
我只是希望大家能令略到出题者的意图! 他出的数字 不是例如:122345
等 级:
#235楼 得分:0
回复于:2007-05-12 10:17:57
哦~~天哪~~我觉得我这个软件的学生还是改行吧~~我的大脑和心脏都没有那么健壮~~~
(习惯性抽筋)
等 级:
#236楼 得分:0
回复于:2007-05-12 10:59:49
留名,以后慢慢看
(进态)
等 级:
#237楼 得分:0
回复于:2007-05-14 18:52:54
mark+mark
(いつか景気になるかな)
等 级:
#238楼 得分:0
回复于:2007-05-14 18:54:51
等 级:
#239楼 得分:0
回复于:2007-05-15 12:38:27
up学习
(惆怅的飞鸟)
等 级:
#240楼 得分:0
回复于:2007-05-15 14:21:59
MARK
等 级:
#241楼 得分:0
回复于:2007-05-15 16:51:55
用手写在纸上,穷举所有的可能的排列,然后system.out.print( 。。。。 ).
哈哈这是最快的办法!!!!!
等 级:
#242楼 得分:0
回复于:2007-05-16 14:53:38
我刚学,暂无思路!
(yangyang)
等 级:
#243楼 得分:0
回复于:2007-05-18 10:28:33
学习,谢谢!
等 级:
#244楼 得分:0
回复于:2007-05-18 13:55:04
等 级:
#245楼 得分:0
回复于:2007-05-19 21:20:35
using System;
using System.Collectio .Generic;
using System.Text;
using System.Collectio using System.IO;
name ace Co oleA lication1
{ cla Program { ArrayList list = new ArrayList(); static void Main(string[] args) { int[] array = new int[] { 1,2,3,4,5,6}; StreamWriter sw = new StreamWriter(@ d:\\hello.txt ); //for (int i = 0; i array.Length; i++) //{ // Co ole.Write(array[i]); // //第四位!=4, ---- 3,5不能相连 //} ArrayList list = new ArrayList(); list.Add( 123456 ); for (int ini_1 = 0; ini_1 6; ini_1++) { for (int ini_2 = 0; ini_2 6; ini_2++) { if (ini_1 == ini_2 || ((array[ini_2] == 3 &am am array[ini_1] == 5) || (array[ini_1] == 3 &am am array[ini_2] == 5))) continue; for(int ini_3=0;ini_3 6;ini_3++) { if ((ini_2 == ini_3 || ini_3==ini_1) || ((array[ini_2] == 3 &am am array[ini_3] == 5) || ((array[ini_3] == 3 &am am array[ini_2] == 5)))) continue; for (int ini_4 = 0; ini_4 6; ini_4++) { if ((ini_4 == ini_3 || ini_4 == ini_2 || ini_4 == ini_1) || (array[ini_3] == 3 &am am array[ini_4] == 5) || (array[ini_4] == 5 &am am array[ini_3] == 3)) continue; f import java.util.Iterator;
import java.util.TreeSet;
* time 2011/03/18
* @author liuxingyu
public cla Travel_Graph {
private String[] b = new String[]{1,2,2,3,4,5};
private int n = b.length;
private boolean[] visited = new boolean[n];
private int[][] a = new int[n][n];
private String result =" quot private TreeSetString
TreeSet = new
TreeSetString();
private
2011-03-18 回复 (0)
相关讨论
算法程序题: 该公司笔试题就1个,要求在10分钟内作完。 题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:4不能在第三位,3与5不能相连。
基本思路: 1 把问题归结为图结构的遍历问题。实 ...
2011-02-27 回复 (50)
原题如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:4不能在第三位,3与5不能相连.
我看了回贴都没有很好解决,主要是没有排除重复。
解决思路:强化题目,用1、2、2、3、4、5这六个数字排列“递增”序列。其他要求不变。
算法思路:显然是递归, ...
2007-02-26 回复 (1)
最近有同事去腾讯面试,其中一个排序算法题:从1亿个数字中取出最大的100个. 我感觉用位图排序是比较合适的.位图排序的特点是用内存空间换取CPU时间.代码如下:
import java.util.Random;
public cla Top100 {
public static int[] getTop100(int[] i utArray) {
2010-03-30 回复 (98)
最近java项目中使用到discuz,为了用户同步大费周折,因为官方只有php的接入代码,java的只有自己琢磨着实现,其中比较麻烦的是加密解密,最后索性直接把c#的AuthCode直接翻译成了java代码,哈哈,小小调试了下就ok了,也算省了事,现在把代码贴出来,也许有需要的同学直接可以用了。
import java.io.*;
import com.she.util.*;
impor ...
2008-12-26 回复 (3)
Hibernate3提供了DetachedCriteria,使得我们可以在Web层构造detachedCriteria,然后调用业务层Bean,进行动态条件查询,根据这一功能,我设计了通用的抽象Bean基类和分页类支持,代码来自于Quake Wang的javaeye-core包的相应类,然后又做了很多修改。
分页支持类:
package com.iteye.common.util;
imp ...
2005-07-15 回复 (43)
相关新闻
构建于lucene之上的可用的Java开源Spider少之又少, indle长期没有更新且功能不够完善,故而自己参考其源
代码重新编写了一个可扩展的WebCrawler,本着开源共享,共同进步的想法发布于此,期冀得到大家的批评指正,
有任何意见及建议均可Email联系我 (kaninebruno@hotmail.com)
以下代码基于lucene-2.3.1,htmlparser-1 ...
2008-04-01 回复 (8)
《飞行大亨》是我很喜欢的一部电影,不过这里我想介绍的是一个叫Aviator的开源的Java表达式求值器。
一、轮子的必要性
表达式的求值上,java的选择非常多,强大的如Groovy、JRuby,N年没维护的bea hell,包括javaeye上朋友的IKExpre ion。为什么还需要Aviator?或者说Aviator的特点是什么?
我将Aviator定位在 ...
2010-06-30 回复 (12)
对C, Erlang, Java and the Go 编程语言的Hello world web服务进行了测试 .
* C, 使用高性能的web server-nginx,以及一个 hello world 的nginx模块* Erlang/OTP* Java, 使用MINA 2.0框架.* Go, http://golang.org/
1. 测试环境
1.1 Hardware/OS
2009-11-18 回复 (17)
JavaScript Based Code Generator - codegen
工具主页
http://sourceforge.net/projects/jbcgen/
快速生成程序代码, 比如Struts, Spring, Jdbc/Hibernate所有前后台的代码.
简单介绍
本工具生成代码的思想是读取数据库中表的结构, 使用JavaScript作为脚本语言编写模板, 生成各种代码 ...
2008-03-06 回复 (24)
相关博客
import java.util.Iterator;
import java.util.TreeSet;
* time 2011/03/18
* @author liuxingyu
public cla Travel_Graph {
private String[] b = new String[]{1,2& ...
2011-03-18 回复 (0)
import java.util.Iterator;
import java.util.TreeSet;
public cla Sort {
private String[] b = new String[] {1,2,2,3,4,6};
...
2010-01-08 回复 (0)
算法程序题:该公司笔试题就1个,要求在10分钟内作完。题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:4不能在第三位,3与5不能相连。下面的代码是网上的一位老兄写的,值得参考一下:上面的程序还可以改进一下的,各位有时间可以想一想.
2006-10-11 回复 (0)
题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:4不能在第三位,3与5不能相连。
基本思路:
1 把问题归结为图结构的遍历问题。实际上6个数字就是六个结点,把六个结点连接成无向连通图,对于每一个结点求这个图形的遍历路径,所有结点的遍历路 ...
2010-06-18 回复 (0)
相关问答
一系列数字1,2,2,3,4,5要求输出一系列数字,使得4不可以在第三位,3,5不可以相邻,求main方法??
2009-02-21 回复 (3)
题目1:输入一个字符串,输出该字符串中对称的子字符串的最大长度。
比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
这里涉及到判断一个字符串是否是对称。
题目2:求随机数构成的数组中找到长度大于=3的最长的等差数列
输出等差数列由小到大:
如果没有符合条件的就输出
格式:
输入[1,3,0,5,-1,6]
输出[-1,1,3,5]
要求时间复杂度,空间复 ...
2011-05-04 回复 (36)
曾经面试遇到的问题:
1. 色子(6个面),N个色子,把所有组合输出来,去掉重复的(如:3个色子: 1,2,3的组合 和 3,2,1的组合 或者 2,3,1 的组合 都示为重复的 )
2. 画TABLE,所有单元格相临的颜色都不能有重复的.
这2个问题说明:
当时去了一家公司面试,环境挺好,也挺不错.
面试很简单.也很到位.
就给了我3个题. 并且只要做出其中2个题就可以.时间是5小时. 我看了 ...
2010-07-19 回复 (13)
矩阵相乘有点迷糊
帮忙做下,越简单越好,能实现就OK
设计和编写代表矩阵的Matrix类。该类包括矩阵行列数变量int rows和int cols,矩阵数据数组double data[][],构造方法Matrix()、Matrix(int rows,int cols)、Matrix(int rows,int cols,double data[][]),获取某元素值的方法getData(int
2008-11-07 回复 (4)
相关群组讨论
节点类
package graph;
public cla GraphNode {
public GraphNode link;
public int info;
2007-06-25 回复 (19)
在8×8的棋盘上分布着n个骑士,他们想约在某一个格中聚会。骑士每天可以像国际象棋中的马那样移动一次,可以从中间向8个方向移动,请你计算n个骑士的最早聚会地点和要走多少天,要求尽早聚会,且n个人走的总步数最少,先到聚会地点的骑士可以不再移动等待其他的骑士。
从键盘输入n(0=64),然后一次输入n个其实的初始位置xi,yi(0=xi,y=7)。屏幕输出以空格分割的三个 ...
2007-09-06 回复 (16)
执行入口程序
package com.rayeen. ider.vertical.recognize;
import java.io.BufferedReader;
import java.io.FileI utStream;
import java.io.FileNotFoundExceptio import java.io.IOExceptio import jav ...
2009-06-19 回复 (8)
我根据Grid的实现方式,写了一个pagedloop组件,设计了一个LoopDataSource接口作为pagedloop的source,主要是希望从数据库中抓取每页所需的记录,而不是所有记录。
LoopDataSource.java:
public interface LoopDataSource extends IterableObject{
int getTota ...
2011-01-22 回复 (3)
相关专栏文章
自己实现操作Canvas,很大部分是对文字的显示以及排版操作。而对字体的定义则每个厂商都有自己的规范,必然nokia定义了大,中,小字体。而我在其他手机上只有一种字体,所以无论你怎么样定义字体的大小都只有一种效果,这样的话。你可能要在程序中自己进行判断,然后在显示出来。要不然的话,则写出的程序在各个机型上显示的效果会有一些不同。
下面让我们来设计可以滚动的TextBox.
...
2006-11-15 回复 (2)
高级UI中的List控件对于广大应用来说是足够的。但有些特别需求的功能确不得不自己开发,比如实现没一行字体颜色不同,字体样式不同,还有排版等方面问题时候则要自己动手实现一个了。下面把我在项目中学习到得经验与大家分享下。
但是客户有个需求,说你这个List需要翻页,我要求输入什么键你进行上下翻页。我要求在每一行字体里面包含一些不同颜色得字,根据XP,好我拥抱需求。所以让 ...
2006-11-22 回复 (0)
一个模仿 Ruby Test::Unit 的 Quick &am Dirty 单元测试框架,托 __traits 的福,看起来已经有那么点意思了。提取行号在目前还没法实现,估计等 macro 出来就能解决这个问题。
SVN里的最新版在下面的链接处:dotmars.googlecode.com/svn/trunk/sandbox/2.0/test.dD2.0 代码
2007-07-27 回复 (0)
2003-2011 ITeye.com.posts - 333,comments - 109,trackbacks - 0
2009年6月
常用链接
留言簿
随笔分类
随笔档案
最新随笔
搜索 积分与排名
积分 -
排名 -
最新评论
感谢这位大哥提供了宝贵的资料!
--pengnan1111
给力。。。。
博主感谢你!
--路人
问个问题呗:ckeditor只能点击开始部分才能输入文字,怎样解决这个问题呢?我qq 277122154,谢了!!!
阅读排行榜
评论排行榜
60天内阅读排行
package com.test;
import java.util.ArrayList;
import java.util.List;
/** * 1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列, 如:512234、412345等.要求:"4"不能在第三位,"3"与"5"不能相连. * * @author SIMONE wangxi h55@126.com 2009-6-12 */
public cla GroupTest { public static List
list = new ArrayList
(); /** * 构造字符串的所有排序组合 * * @ aram tr 将要组合成的字符 * @ aram tr 源字符串集 */ public static void group(String tr, String tr) { if (str.length() != tr.length()) { String rest = getRest(str, tr); for (
int i = 0 i rest.length() i
) { String tem = tr + rest.su tring(i, i + 1
); if (temp.indexOf(
) != 2 &am am temp.indexOf(
1 &am am temp.indexOf(
// 过滤显示条件,如果去掉此处的判断,就是列出所有字符集的排列组合 System.out.println(temp); if (
list.contai (temp)) { list.add(temp); } group(temp, tr); } } } } /** * 从源字符串集中去除将要组合成的字符 * * @ aram tr 将要组合成的字符 * @ aram tr 源字符串集 * @return 剩余字符串集 */ public static String getRest(String tr, String tr) { String rest = ""
; if ( tr.length() tr.length()) { rest = tr; for (
int i = 0 i tr.length() i
) { rest = rest.replaceFirst(str.su tring(i, i + 1
// 注意此处的replaceFirst,而不是replaceAll } } return rest; } public static void main(String[] args) { group(
); System.out.println(list.toString()); }
posted on 2009-06-12 15:54
阅读(1507) 所属分类:
FeedBack: re: 1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列, 如:512234、412345等.要求:4不能在第三位,3与5不能相连.
2009-06-12 17:14 |
god... re: 1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列, 如:512234、412345等.要求:4不能在第三位,3与5不能相连.
2009-06-14 19:01 |
用经典的排列算法,在输出时判断一下就可以了。
不明白为什么要用字符串操作呢。 IT新闻:
· 标题 姓名 主页
验证码
* 内容(请不要发表任何与政治相关的内容) Remember Me? [使用Ctrl+Enter键可以直接提交]
推荐职位:
博客园首页随笔:
知识库:
最简洁阅读版式:
网站导航: 相关文章: Copyright 2011 SIMONE Powered By
模板提供:(寻求志同道合之人)
等 级:
#1楼 得分:30
回复于:2008-12-09 23:17:15
如需要阅读该回复,请
(henry)
等 级:
#2楼 得分:0
回复于:2008-12-10 11:00:37
Java code
java.util.Set;
java.util.TreeSet;
* 原始版本没有考虑重复问题,我进行了修正.< r
* 此算法的精华就是,让一个字符串的所有位置都进行互换,< r
* 这样就产生了所有可能出现的字符串。
@author
赵学庆,nicky_zs www.java2000.net
cla MyTest {
TreeSet
addNumber(String.valueOf(n));
swap(n, beg, i);
perm(n, beg
, end);
swap(n, beg, i);
n[y]) {
addNumber(String str) {
(str.charAt(
str.contai (
str.contai (
set.add(str);
main(String args[]) {
[] number
perm(number,
, number.length
System.out.println(set.size());
(String s : set) {
System.out.print(s
System.out.println();
相关问题

参考资料