Ruby实现数组任意长度元素全排列的方法咨询
解决方案
你需要生成数组中所有长度1到原数组长度的元素排列,再将每个排列转为数字。直接调用permutation时如果不传参数,默认生成和原数组长度相同的排列,所以只得到了6个结果。
用Ruby可以这样简洁实现:
arr = [3, 4, 8] result = (1..arr.size).flat_map do |len| arr.permutation(len).map { |p| p.join.to_i } end p result # 输出:[3, 4, 8, 34, 38, 48, 43, 83, 84, 348, 384, 843, 438, 483, 834]
说明
(1..arr.size):遍历从1到数组长度的所有目标排列长度flat_map:把每个长度对应的排列结果数组直接合并成一个大数组,避免嵌套结构permutation(len):生成当前长度下的所有元素排列join.to_i:将排列数组(比如[3,4])拼接成字符串再转为数字(34)
这个方式不需要先生成子集,直接按长度生成对应排列并转换,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Vessel
相关产品推荐
相关产品推荐

