红宝石与重复越野车方法的差异
问题描述:
我需要一个用Ruby编写的方法来计算变化。我已经用Java编写了它,但是因为我是Ruby的新手,所以我错过了Ruby实现。红宝石与重复越野车方法的差异
的方法suposed做到这一点:
方法(1, “01”)=> [ “0”, “1”]
方法(2, “01”)=> [ “00”, “01”,“10”,“11”] ...所以你明白了。
注:在Ruby IMPL,我给paralms这样的:方法(2,[ “0”,1" ]),但是这不是一个问题
我的Java IMPL:
public static List<String> Variations(int strength, String usableChars) {
List<String> list =
new ArrayList<String>((int) Math.pow(usableChars.length(), strength));
if (strength == 0) {
list.add("");
} else {
List<String> l = Variations(strength - 1, usableChars);
for (char c : usableChars.toCharArray()) {
for (String s : l) {
list.add(c + s);
}
}
}
return list;
}
而且它工作正常,但这个是我的Ruby实现:
def Variation (strength, arrayOfString)
array = Array.new(arrayOfString.size**strength)
if strength == 0
array << ""
else
a = Variation(strength-1, arrayOfString)
for i in arrayOfString do
for j in a do
array << (i + j)
end
end
end
return array
end
在这方面,我不断收到错误消息test.rb:10:'变异':不能转换成零字符串(类型错误)。
答
在Ruby中,数组根据需要自动增长。因此,改变你的数组初始化来自:
array = Array.new(arrayOfString.size**strength)
到
array = []
要列举了在字符串中的每个字符,而不是
for i in arrayOfString do
做到这一点:
arrayOfString.each_char do |i|
最终结果:
#!/usr/bin/ruby1.8
def Variation (strength, arrayOfString)
array = []
if strength == 0
array << ""
else
a = Variation(strength - 1, arrayOfString)
arrayOfString.each_char do |i|
for j in a do
array << (i + j)
end
end
end
return array
end
p Variation(2, '01') # => ["00", "01", "10", "11"]
each_char在Ruby> = 1.8.7中,或者你可以从backports gem得到它。
谢谢,工作正常。我有意地声明了数组的大小,以免在每次添加新元素时增加大小(在Java中,我不需要声明大小)。有什么办法可以在Ruby中做到这一点? – 2010-12-04 14:51:27