黑马程序员技术交流社区
标题:
递归问题
[打印本页]
作者:
深寒丶
时间:
2015-11-22 22:50
标题:
递归问题
编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
原始字符串是"abc",打印得到下列所有组合情况:
"a" "b" "c"
"ab" "bc" "ca" "ba" "cb" "ac"
"abc" "acb" "bac" "bca" "cab" "cba"
求教一下这道题递归怎么做,我只会输出三个和一个字母的
作者:
深寒丶
时间:
2015-11-23 10:55
都没人会么.....
作者:
z940505
时间:
2015-11-23 15:31
能把你的代码贴上来不?我看完你的帮你改改
作者:
深寒丶
时间:
2015-11-24 22:37
z940505 发表于 2015-11-23 15:31
能把你的代码贴上来不?我看完你的帮你改改
package com.itheima;
/*
* 6、 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
*
*
* 原始字符串是"abc",打印得到下列所有组合情况:
* "a" "b" "c"
* "ab" "bc" "ca" "ba" "cb" "ac"
* "abc" "acb" "bac" "bca" "cab" "cba"
*
*@author
*@version
v2015-11-23 23:33:51
*/
public class Test6 {
/*
* jav程序运行的入口
* jvm自动加载main方法
*/
public static void main(String[] args) {
String s = "abc";
printArray(s,"");
}
/**
* 字符串中的所有元素进行排序
* @param str 需要排序的字符串
* @param ch 每次字符串中的第一个字符
* @param chr 拼接的两个字符
*/
private static void printArray(String str, String ch) {
if(str.length() == 0){
System.out.println(ch);
}else{
for(int i = 0;i < str.length();i++){
printArray(str.substring(1),ch+str.charAt(0));
str = str.substring(1)+str.charAt(0);
}
}
}
}
作者:
xiang2713
时间:
2015-11-24 22:42
今天被递归作业玩疯了
作者:
一江夜雨
时间:
2015-11-25 11:35
package com.itheima;
import java.util.ArrayList;
/**
*需求:编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
* 原始字符串是"abc",打印得到下列所有组合情况:
* "a" "b" "c"
* "ab" "bc" "ca" "ba" "cb" "ac"
* "abc" "acb" "bac" "bca" "cab" "cba"
*
*@author XX XXXXXX
*@version 1.0 2015-11-25 11:35:11
*/
public class Test7 {
/**
* java程序运行入口
* jvm自动加载main方法
*/
public static void main(String[] args) {
//创建一个字符串
String str = "abc";
//调用方法,输出结果
String newstr = getCombination(str);
System.out.println(newstr);
}
public static String getCombination(String str) {
//创建一个Arraylist用来存放结果
ArrayList<String> list =new ArrayList<String>();
//将字符串拆分成单个字符存入ArrayList
char[] ch = str.toCharArray();
for(char c:ch)
{
list.add(c + "");
}
//进行循环存入
int len=str.length(); //记录随着长度增长产生的字符串个数
int start=0; //用于记数
for(int i = 2;i <= str.length(); i++) //i表示字符串长度
{
//取出i长度的所有字符串
for(int x = 0; x<len; start++, x++)
{ //在i-1长度的字符串末尾添加单个字符串,产生长度为i的字符串
for(int in = 0;in <str.length(); in++)
{
list.add(list.get(start)+list.get(in));
}
}
len = len*str.length();
}
//调用输出字符串方法
print(list);
return str;
}
//输出字符串
private static void print(ArrayList<String> list) {
for(String Ls:list)
{
//判断字符串是否含有相同元素,不含有则输出
if(!isSame(Ls))
{
System.out.println(Ls);
}
}
}
private static boolean isSame(String Ls) {
if(Ls.length()>1)
{
//依次取出该字符串前一半的元素
for(int n = 0; n< Ls.length()/2+1; n++)
{
//对取出的元素进行第一次出现和最后一次出现位置比较,相同则说明只存在一个该元素
if(Ls.indexOf(Ls.charAt(n)) == Ls.lastIndexOf(Ls.charAt(n)))
{
continue;
}
return true;//否则返回True表示存在相同元素
}
return false;//所有元素判断完,返回false,表示无相同元素。
}
return false;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2