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

本文介绍了一个使用递归方法生成特定长度字符串的所有可能组合的算法。输入一个字符集合和一个正整数k,该算法能够输出所有长度为k的字符串组合。示例演示了如何通过递归构建这些组合。

// 给出一个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/
### 定义 Rectangle 类 以下是一个完整的 `Rectangle` 类定义,包含私有属性 `__width` `__height`,以及方法 `set_size`、`get_area` `get_info`。代码中还使用了 `@property` 装饰器来实现对属性的封装[^3]。 ```python class Rectangle: def __init__(self, width, height): self.__width = width # 私有属性宽度 self.__height = height # 私有属性高度 @property def width(self): return self.__width # Getter 方法获取宽度 @width.setter def width(self, value): if value <= 0: # 检查宽度是否合法 raise ValueError("Width must be positive.") self.__width = value # Setter 方法设置宽度 @property def height(self): return self.__height # Getter 方法获取高度 @height.setter def height(self, value): if value <= 0: # 检查高度是否合法 raise ValueError("Height must be positive.") self.__height = value # Setter 方法设置高度 def set_size(self, width, height): self.width = width # 使用 setter 方法设置宽度 self.height = height # 使用 setter 方法设置高度 def get_area(self): return self.__width * self.__height # 计算面积 def get_info(self): return f"Rectangle(width={self.__width}, height={self.__height})" # 返回矩形信息 # 示例用法 try: r = Rectangle(5, 10) print(r.get_info()) # 输出:Rectangle(width=5, height=10) print(r.get_area()) # 输出:50 r.set_size(7, 3) print(r.get_info()) # 输出:Rectangle(width=7, height=3) print(r.get_area()) # 输出:21 r.width = 8 # 使用 property 修改宽度 print(r.get_info()) # 输出:Rectangle(width=8, height=3) r.height = -1 # 尝试设置非法高度,抛出异常 except ValueError as e: print(e) # 输出:Height must be positive. ``` 上述代码实现了以下功能: - **私有属性**:`__width` `__height` 是私有属性,外部无法直接访问[^1]。 - **封装**:通过 `@property` `.setter` 装饰器实现对属性的封装合法性检查。 - **方法**: - `set_size`:用于同时设置宽度高度。 - `get_area`:计算矩形面积。 - `get_info`:返回矩形的详细信息。 ### 注意事项 - 使用 `@property` `.setter` 可以确保属性的安全性合法性检查。 - 如果尝试设置非法值(如负数),会抛出 `ValueError` 异常。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值