【问题标题】:Find every permutation of an array in Ruby, including permutations with sub arrays在 Ruby 中查找数组的每个排列,包括带有子数组的排列
【发布时间】:2015-02-03 10:13:00
【问题描述】:

考虑一个数组:[4, 6, 9]

要求所有排列:(一位、两位和三位数字)

[[9],
 [6],
 [4],
 [9, 6],
 [9, 4],
 [6, 9],
 [6, 4],
 [4, 9],
 [4, 6],
 [9, 6, 4],
 [9, 4, 6],
 [6, 9, 4],
 [6, 4, 9],
 [4, 9, 6],
 [4, 6, 9]]

【问题讨论】:

  • 我不能说我会推荐以下内容,但它确实有效:([4,6,9]+[nil,nil]).permutation(3).map(&:compact).uniq
  • 嗯,这似乎效率低下,很难成为通用的单线。
  • Jikku,你已经准确地表达了我的想法;尽管如此,我认为它值得评论(当然不是答案!),因为它对灰色的小细胞来说是很好的锻炼。我不熟悉特里凡得琅。我看这只是一个小镇,只有 160 万 +-。
  • @CarySwoveland 是的,蒂鲁文南特布勒姆是印度的一个小城市。你应该来这里一次,它是一座美丽的城市。实际上,您考虑包含 nils 并稍后将其删除的方式给我留下了深刻的印象,但是在尝试对其进行改进时,我偶然发现了很多地方。无论如何,感谢您的宝贵时间。

标签: ruby arrays permutation


【解决方案1】:

记录这个问题和我自己的发现,因为我在搜索时没有找到足够简单的东西。也许这可以帮助某人:

a = [4, 6, 9]
(1..a.length).flat_map { |n| a.permutation(n).to_a }

对于每个组合,只需切换方法,如下所示:

a = [4, 6, 9]
(1..a.length).flat_map { |n| a.combination(n).to_a }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2015-12-31
    • 2017-12-26
    • 2021-11-20
    • 2010-09-23
    相关资源
    最近更新 更多