JAVA-从题目看算法,将输入字符串进行排序并输出

来看一个排列的例子,它所做的工作是将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"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种方法相比较都是递归算法的实现,但第二种更加灵活一些,也更加容易进行输出比较。

JAVA-从题目看算法,将输入字符串进行排序并输出,布布扣,bubuko.com

时间: 2024-12-22 05:57:04

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

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

本程序演示从一个字符串中找出重复的字符,并显示重复字符的个数. import java.util.HashMap; import java.util.Map; import java.util.Set; public class Details { public void countDupChars(String str){ //创建一个HashMap对象 Map<Character, Integer> map = new HashMap<Character, Integer>()

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

输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串&quot;345&quot;,则输出整数345。

方法一:使用C函数库中的函数atoi(const char *nptr),一行代码就可以解决问题,但这并不是题目所需要的解题思路: 方法二:假如我们输入的是“345”,从左到右依次遍历,第一次所要的结果是“3”,第二次所要的结果是“34”,34=3*10+4,第三次所要的结果是“345”,345=34*10+5.由此,我们可以从左到右依次遍历每一个字符,将前一次得到的结果*10+本次遍历的字符,使用一个循环就可以将一个字符串转化成一个整数. 如果字符串中的第一个字符是“-”,那么得到的是负整数.

题目六:控制台输入年龄,根据年龄输出不同的提示

package liu0912; import java.util.Scanner; public class Nianling { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入您的年龄"); double age=sc.nextDouble(); if(age>0&&age<=12) { System.o

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

目录 1 问题描述 2 解决方案 2.1 递归实现 2.2 字典序排列实现   1 问题描述 输入一个字符串,打印出该字符串的所有排列.例如,输入字符串"abc",则输出有字符'a','b','c'所能排列出来的所有字符串"abc","acb","bac","bca","cab","cba". 2 解决方案 2.1 递归实现 从字符串中选出一个字符作为排列的第一个字符

[算法练习] 把字符串转换成整数

题目说明: 输入一个表示整数的字符串,把该字符串转换成整数并输出.例如输入字符串"345",则输出整数345. 程序代码: #include <gtest/gtest.h> using namespace std; int StrToInt(const char* szValue, int nBase = 0, bool* bValid = NULL) { long long nValue = 0; int nSign = 1; if (bValid) { *bValid

解密随机数生成器(二)——从java源码看线性同余算法

Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术的3.2.1节) 如果两个Random实例使用相同的种子,并且调用同样的函数,那么生成的sequence是相同的 也可以调用Math.random()生成随机数 Random实例是线程安全的,但是并发使用Random实例会影响效率,可以考虑使用ThreadLocalRandom变量. Random实

OJ——华为编程题目:输入字符串括号是否匹配

package t0815; /* * 华为编程题目:输入字符串括号是否匹配 * 若都匹配输出为0,否则为1 * 样例输入:Terminal user [name | number (1)] * 样例输出:0 * Java版本 */ /* * 个人总结: * (1)语法上Java的输入Scanner使用 * (2)char[] arr=mxf.toCharArray()的使用,将输入的字符串转成字符数组:这样就可以一个 * 一个的遍历 * (3)算法上,这里使用了经典的入栈和出栈的思想 * */

【字符串处理算法】将输入字符串中的各个单词反序的算法设计及C代码实现

一.需求描述 输入一个字符串,编写程序将该字符串中的各个单词反序拼装并输出.例如,如果输入的字符串是"Hello, how do you do",那么输出的字符串为"do you do how Hello,".注意保留各个单词之间的空格及相应的标点符号. 二.算法设计 通过观察示例字符串(即"Hello, how do you do"),我们可以看到该字符串中各个单词与空格之间的关系为:单词总数=空格总数+1.也就是说,示例字符串中的空格总数为4