`
shuai1234
  • 浏览: 978091 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

Java经典算法集

    博客分类:
  • java
 
阅读更多

算法程序题:

    该公司笔试题就1个,要求在10分钟内作完。

    题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。



static int[] bits = new int[] { 1, 2, 3, 4, 5 };

/**
 * @param args
 */
public static void main(String[] args) {
sort("", bits);
}

private static void sort(String prefix, int[] a) {
if (a.length == 1) {
System.out.println(prefix + a[0]);
}

for (int i = 0; i < a.length; i++) {
sort(prefix + a[i], copy(a, i));
}
}

private static int[] copy(int[] a,int index){
int[] b = new int[a.length-1];
System.arraycopy(a, 0, b, 0, index);
System.arraycopy(a, index+1, b, index, a.length-index-1);
return b;
}


**********************************************************************

  基本思路:
1 把问题归结为图结构的遍历问题。实际上6个数字就是六个结点,把六个结点连接成无向连通图,对于每一个结点求这个图形的遍历路径,所有结点的遍历路径就是最后对这6个数字的排列组合结果集。
2 显然这个结果集还未达到题目的要求。从以下几个方面考虑:
  1. 3,5不能相连:实际要求这个连通图的结点3,5之间不能连通, 可在构造图结构时就满足改条件,然后再遍历图。
  2. 不能有重复: 考虑到有两个2,明显会存在重复结果,可以把结果集放在TreeSet中过滤重复结果
  3. 4不能在第三位: 仍旧在结果集中去除满足此条件的结果。

采用二维数组定义图结构,最后的代码是:

import java.util.Iterator;
import java.util.TreeSet;

public class TestQuestion {

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 = "";
private TreeSet set = new TreeSet();

public static void main(String[] args) {
new TestQuestion().start();
}

private void start() {

// Initial the map a[][]
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) {
a[i][j] = 0;
} else {
    a[i][j] = 1;
}
}
}

// 3 and 5 can not be the neighbor.
a[3][5] = 0;
a[5][3] = 0;

// Begin to depth search.
for (int i = 0; i < n; i++) {
    this.depthFirstSearch(i);
}

// Print result treeset.
Iterator it = set.iterator();
while (it.hasNext()) {
String string = (String) it.next();
// "4" can not be the third position.
if (string.indexOf("4") != 2) {
System.out.println(string);
}
}
}

private void depthFirstSearch(int startIndex) {
visited[startIndex] = true;
result = result + b[startIndex];
if (result.length() == n) {
// Filt the duplicate value.
set.add(result);
}
for(int j = 0; j < n; j++) {
if (a[startIndex][j] == 1 && visited[j] == false) {
depthFirstSearch(j);
} else {
continue;
}
}

// restore the result value and visited value after listing a node.
    result = result.substring(0, result.length() -1);
    visited[startIndex] = false;
}
}

 

分享到:
评论

相关推荐

    java经典算法合集

    Description: Java经典算法java经典算法java经典算法java经典算法java经典算法java经典算法java经典算法java经典算法 Tags: Java经典算法 Java经典算法合集是Java编程语言中的一些经典算法的集合,这些算法涵盖了...

    JAVA经典算法合集

    JAVA经典算法合集 本资源摘要信息涵盖了四个经典算法程序,分别是:兔子繁殖问题、判断素数、水仙花数、分解质因数。 一、兔子繁殖问题 该程序解决了经典的兔子繁殖问题,即从出生后第三个月起,每个月都生一对...

    Java算法集题大全.zip

    Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法...

    java经典算法90题含源码及答案.rar

    首先,让我们详细探讨一下Java算法的重要性。算法是解决问题的步骤或方法,是计算机科学的基础。在Java编程中,良好的算法设计和实现能力能够极大地提高代码的效率和可读性。通过解决这些算法题,开发者可以锻炼逻辑...

    java经典算法练习题

    本压缩包包含了三个文档,分别是“JAVA经典算法40题.doc”、“最新JAVA编程题全集_50题及答案.doc”和“50道JAVA基础编程练习题.doc”,这些资源为初学者提供了大量的实践机会,有助于深入理解和运用Java。...

    java经典算法汇总.pdf

    Java经典算法汇总 Java经典算法汇总.pdf中提供了多种排序算法的实现,包括冒泡排序、选择排序和插入排序。这些算法都是Java语言中最基本和最常用的排序算法。 冒泡排序算法 冒泡排序算法是一种简单的排序算法,它...

    JAVA经典算法90题【含源码】

    在编程领域,特别是Java开发,熟练掌握算法是提升技术能力的关键。"JAVA经典算法90题【含源码】"的资源集合为Java初学者提供了...所以,对于初学者来说,这套资料是提高Java算法能力的宝贵资源,应充分利用并深入研究。

    java最新经典算法源码

    在"java最新经典算法源码"这个压缩包中,包含了一系列与Java编程相关的资源,特别是针对Java基础编程和算法的实践练习。这些资源对于学习者提升编程技能,以及准备Java面试来说非常有价值。 首先,`java基础编程...

    Java 常用数值算法集

    本压缩包文件"Java 常用数值算法集"很可能是为了帮助开发者们快速理解和实现常见的数值计算方法。下面,我们将详细探讨几个Java中常用到的数值算法。 1. **线性代数运算**:包括矩阵运算、向量运算等。例如,求解...

    JAVA经典算法收集整理

    以下是一些经典的JAVA算法,包括冒泡排序、选择排序和插入排序。 1. **冒泡排序(Bubble Sort)**: 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换...

    Java常用数值算法集

    "Java常用数值算法集"很可能包含了用于解决数学问题的类和方法,涵盖了线性代数、微积分、概率统计、优化、数值积分等多个领域。下面将详细介绍这些领域的常见算法及其在Java中的实现。 1. **线性代数**: - **...

    java 常用数值算法集b

    "Java 常用数值算法集b"可能包含了一系列实用的算法实现,用于解决各种数值计算问题。下面将详细探讨Java中的常见数值算法及其应用。 1. **线性代数运算**:包括矩阵的加减乘除、求逆、特征值、特征向量等。在Java...

    JAVA经典算法40题.zip

    在编程领域,算法是解决问题的关键,对于JAVA开发者来说,掌握经典算法不仅能提升编程能力,还能在面试和实际工作中表现出色。"JAVA经典算法40题"这个压缩包提供了一个学习和实践的机会,它包含了40个Java编程中的...

    Java常用数值算法集 源代码

    Java常用数值算法集 源代码 何光渝编 iso版本

    Java常用数值算法集.rar

    "Java常用数值算法集"是一个集合,包含了一系列在Java中实现的常用数值算法。下面将详细探讨这些算法及其在实际应用中的重要性。 1. **线性代数算法**:线性代数是现代计算的核心,涉及到矩阵和向量的操作。例如,...

    Java经典算法之数据挖掘

    本资源聚焦于Java实现的经典数据挖掘算法,涵盖了分类、关联分析、集成采矿、聚类、连接挖掘以及统计学习等多个方面。 首先,分类算法是数据挖掘中的核心部分,它根据已有的特征将数据分为不同的类别。常见的Java...

    Java常用数值算法集代码

    在这个"Java常用数值算法集代码"中,我们很显然会探讨一系列在Java编程中用于处理数值计算和算法实现的关键技术。这些算法通常包括但不限于数学计算、线性代数、统计分析、优化问题、图形图像处理以及科学计算等多个...

Global site tag (gtag.js) - Google Analytics