给出一个set的字符和一个正数k,求所有由这个set能组成长度为k的字符串集合 print-all-combinations-of-given-length

// 给出一个set的字符和一个正数k,求所有由这个set能组成长度为k的字符串集合

/*

Input: 

set[] = {'a', 'b'}, k = 3

Output:

aaa

aab

aba

abb

baa

bab

bba

bbb

Input: 

set[] = {'a', 'b', 'c', 'd'}, k = 1

Output:

a

b

c

d



package recursion;

import java.util.ArrayList;

public class N_sets_form_length_k_string {

	// 给出一个set的字符和一个正数k,求所有由这个set能组成长度为k的字符串集合
	/*
	 Input: 
	set[] = {'a', 'b'}, k = 3
	
	Output:
	aaa
	aab
	aba
	abb
	baa
	bab
	bba
	bbb
	
	
	Input: 
	set[] = {'a', 'b', 'c', 'd'}, k = 1
	Output:
	a
	b
	c
	d
	 
	 */
	public static void main(String[] args) {
		ArrayList<Character> set = new ArrayList<Character>();
		set.add('a');
		set.add('b');
		
		int k = 3;
		ArrayList<String> al = new ArrayList<String>();
		StringBuilder sb = new StringBuilder();
		rec(set, k, al, sb);
		
		System.out.println(al);
	}
	
	// 观察到选定第一个字符后,问题就转化为k-1的递归问题,而set中的每一个元素都能充当第一个字符。
	// 结束条件就是k为0时。
	public static void rec(ArrayList<Character> set, int k, ArrayList<String> al, StringBuilder sb){
		if(k == 0) {
			al.add(new String(sb));
			return;
		}
		
		for(int i=0; i<set.size(); i++) {
			sb.append(set.get(i));
			rec(set, k-1, al, sb);
			sb.deleteCharAt(sb.length()-1);		// 善用StringBuilder来删除最后一个字符
		}
	}

}

http://www.geeksforgeeks.org/print-all-combinations-of-given-length/

好的,下面是一个简单的示例代码: ```java // 抽象类 abstract class Animal { // 抽象方法 public abstract void sayHello(); } // 接口 interface Flyable { void fly(); } // 自定义异常 class MyException extends Exception { public MyException(String message) { super(message); } } // 父类 class Person { private String name; public Person(String name) { this.name = name; } public final void sayHello() { System.out.println("Hello, my name is " + name); } } // 子类 class Student extends Person implements Flyable { private int grade; public Student(String name, int grade) { super(name); this.grade = grade; } // 重写方法 @Override public void sayHello() { System.out.println("Hi, I'm a student and my name is " + super.name + ", and my grade is " + grade); } // 实现接口方法 @Override public void fly() { System.out.println("I'm flying"); } } // 字符串处理方法 class StringUtil { public static String reverse(String str) { return new StringBuilder(str).reverse().toString(); } public static String toUpperCase(String str) { return str.toUpperCase(); } public static String toLowerCase(String str) { return str.toLowerCase(); } public static String trim(String str) { return str.trim(); } } public class Demo { public static void main(String[] args) { // 创建对象 Student student = new Student("Tom", 3); // 调用方法 student.sayHello(); student.fly(); // 字符串处理方法 String str = " Hello, World! "; System.out.println(StringUtil.reverse(str)); System.out.println(StringUtil.toUpperCase(str)); System.out.println(StringUtil.toLowerCase(str)); System.out.println(StringUtil.trim(str)); // 异常处理 try { int i = 1 / 0; } catch (ArithmeticException e) { System.out.println("除数不能为0"); } try { throw new MyException("自定义异常"); } catch (MyException e) { System.out.println(e.getMessage()); } // 选择语句循环语句 int num = 3; if (num > 0) { System.out.println(num + "是正数"); } else if (num < 0) { System.out.println(num + "是负数"); } else { System.out.println(num + "是0"); } for (int i = 1; i <= 10; i++) { System.out.print(i + " "); } int i = 1; while (i <= 10) { System.out.print(i + " "); i++; } } } ``` 以上代码演示了如何实现一个包含类的封装、get/set方法、构造方法构造方法的重载、继承、方法重写、抽象类、接口、异常处理机制、自定义异常、super、final关键字、多态、字符串处理方法、选择语句循环语句的示例程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值