来看一个排列的样例。它所做的工作是将输入的一个字符串中的全部元素进行排序并输出,比如:你给出的參数是"abc" 则程序会输出:abc acb bac bca cab cba

这是一个典型的可用递归算法来实现的样例,我们来看一下利用递归的2种不同解法。

1.典型递归元素交换的算法

(1)算法的出口在于:low=high也就是如今给出的排列元素仅仅有一个时。

  (2)算法的逼近过程:先确定排列的第一位元素。也就是循环中i所代表的元素。

package test;

import java.util.ArrayList;
import java.util.List; public class Demo1 { public static void main(String[] args) {
permute("ABCD");
} public static void permute(String str) {
char[] strArray = str.toCharArray();
permute(strArray, 0, strArray.length - 1);
} public static void permute(char[] list, int low, int high) {
int i;
if (low == high) {
String cout = "";
for (i = 0; i <= high; i++)
cout += list[i];
System.out.println(cout);
} else {
for (i = low; i <= high; i++) {
char temp = list[low];
list[low] = list[i];
list[i] = temp;
permute(list, low + 1, high);
temp = list[low];
list[low] = list[i];
list[i] = temp;
}
}
}
}

2.利用String的deleteCharAt和charAt来实现元素的交换

package test;

import java.util.ArrayList;
import java.util.List; public class Demo { public static void main(String[] args){
String a = "ABCD";
List<String> result = list(a,""); System.out.println(result.size());
System.out.println(result);
} public static List<String> list(String base,String buff){
List<String> result = new ArrayList<String>(); if(base.length()==0){
result.add(buff);
} for(int i=0;i<base.length();i++){
List<String> mark = list(new StringBuilder(base).deleteCharAt(i).toString(),buff+base.charAt(i));
result.addAll(mark);
} return result;
}
}

2种方法相比較都是递归算法的实现。但另外一种更加灵活一些,也更加easy进行输出比較。

JAVA-从题目看算法,将输入字符串进行排序并输出的更多相关文章

  1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字符不改变,给定函数,编写函数 void Stringchang(const char*input,char*output)其中input是输入字符串,output是输出字符串

    import java.util.Scanner; /*** * 1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字 ...

  2. Java入门:基础算法之从字符串中找到重复的字符

    本程序演示从一个字符串中找出重复的字符,并显示重复字符的个数. import java.util.HashMap; import java.util.Map; import java.util.Set ...

  3. Java中从键盘中任意输入字符串,将其转换成数字后,并求和

  4. 算法笔记_025:字符串的全排列(Java)

    目录 1 问题描述 2 解决方案 2.1 递归实现 2.2 字典序排列实现   1 问题描述 输入一个字符串,打印出该字符串的所有排列.例如,输入字符串”abc”,则输出有字符’a’,’b’,’c’所 ...

  5. Java解决题目:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后,每个月又生一对兔子。。。

    题目:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后,每个月又生一对兔子,假如兔子都不死,问M个月时兔子的数量,M为键盘读入的正整数.(请用Java语言作答) 样例输入: 3 样 ...

  6. Java实现 蓝桥杯VIP 算法提高 3-2字符串输入输出函数

    算法提高 3-2字符串输入输出函数 时间限制:1.0s 内存限制:512.0MB 描述 编写函数GetReal和GetString,在main函数中分别调用这两个函数.在读入一个实数和一个字符串后,将 ...

  7. 编程之法:面试和算法心得(字符串包含java实现)

    内容全部来自编程之法:面试和算法心得一书,实现是自己写的使用的是java 题目描述 给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短.请问,如何最快地判断字符串B中所有字母是否都 ...

  8. Java实现 蓝桥杯 算法训练 字符串长度(IO无敌)

    试题 算法训练 字符串长度 问题描述 输入一个字符串,输出其长度. 输入格式 输入一个字符串 输出格式 输出字符串长度 样例输入 一个满足题目要求的输入范例. HelloWorld 样例输出 10 数 ...

  9. Java实现 蓝桥杯 算法训练 字符串合并

    试题 算法训练 字符串合并 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输入两个字符串,将其合并为一个字符串后输出. 输入格式 输入两个字符串 输出格式 输出合并后的字符串 样例 ...

随机推荐

  1. PHP 表单 - 5(完整表单实例)

    PHP 完整表单实例 本章节将介绍如何让用户在点击"提交(submit)"按钮提交数据前保证所有字段正确输入. PHP - 在表单中确保输入值 在用户点击提交按钮后,为确保字段值是 ...

  2. VB中如何修改treeview的背景色

    改变 TreeView 的背景    Private Declare Function SendMessage Lib "User32" Alias "SendMessa ...

  3. SHELL有用的命令

    [root@gechong /]# find / -name "gechong*" -print [root@gechong /]# find / -name "[A-Z ...

  4. Windows 10 Pro_Ent Insider Preview x86 x64 10147中文版激活

    点击激活windows输入密钥:CC6JP-VN67C-8KCJ4-4V48V-HXM9B然后下载附件中的程序解压后运行注销即可激活企业版:在专业版基础上输入升级密钥:CKFK9-QNGF2-D34F ...

  5. Eclipse 中选中一个单词 ,其他相同的单词颜色就会变化

    "Window"-"preferences"-"Java"-"Editor"-"Mark Occurrence ...

  6. 函数式编程工具:filter和reduce

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #函数式编程工具:filter和reduce #python内置函数中,map函数是用来进行函数式编程这类工具 ...

  7. 如何在MyEclipse中建立一个代理服务器

    一.什么是 TCP/IP Monitor TCP/IP monitor 是可以监控在某个端口上通过 TCP/IP 协议传送的通信数据的一个工具软件. TCP/IP monitor 工具,通过一些配置, ...

  8. 用css3做一个求婚小动画

    概述 本案例主要是运用到了css3的animation.keyframes.transform等属性,熟悉了,就可以做更多的其他动画效果,这几个属性功能非常强大. 详细 代码下载:http://www ...

  9. vim+xdebug调试PHP

    一.安装xdebug 1.编译安装xdebug,也可以使用pecl install xdebug wget http://xdebug.org/files/xdebug-2.3.2.tgz tar - ...

  10. 使用DotNetBarcode制作基本常用条码

    核心代码: /// <summary> /// 打印一维码 /// </summary> /// <param name="codeText"> ...