我试图在长度1和10之间取一个字符串,并输出所有可能的方法将字符串分解为大小为1,2或3的连续子字符串.例如:
Input: 123456
将整数切成单个字符,然后继续查找组合.代码将返回以下所有数组.
[1, 2, 3, 4, 5, 6]
[12, 3, 4, 5, 6]
[1, 23, 4, 5, 6]
[1, 2, 34, 5, 6]
[1, 2, 3, 45, 6]
[1, 2, 3, 4, 56]
[12, 34, 5, 6]
[12, 3, 45, 6]
[12, 3, 4, 56]
[1, 23, 45, 6]
[1, 2, 34, 56]
[1, 23, 4, 56]
[12, 34, 56]
[123, 4, 5, 6]
[1, 234, 5, 6]
[1, 2, 345, 6]
[1, 2, 3, 456]
[123, 456]
[1, 23, 456]
[1, 234, 56]
[12, 345, 6]
[12, 3, 456]
[123, 4, 56]
[123, 45, 6]
Run Code Online (Sandbox Code Playgroud)
我想用红宝石做这件事.谢谢!
这是一个工作函数。可能不是最佳选择,因为我没有花太多时间。
str = "1234567890"
def f(s, n)
return [[]] if s.empty?
(1..[n, s.length].min).map{|c| f(s[c..-1], n).map{|a| [s[0, c]] + a}}.inject(&:+)
end
puts f(str, 3).collect{|l| l * "\t"}
Run Code Online (Sandbox Code Playgroud)
编辑:使它更短一些,长度现在作为第二个参数传递给函数以实现灵活性。