我使用Java创建了一个代码片段,如下所示。这是从nCr获得所有组合的代码。
code using recursion with Java,在线编译器
Java版
select_related
接下来,我尝试用Ruby移植它。但是,它不能很好地工作 你能指出两个代码片段之间的问题是什么吗?
code using recursion with Ruby,在线编译器
Ruby版
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.HashSet;
public class prog {
public static void main(String[] args) {
// nCr : n=[1,2,3,4,5],r=3
ArrayList<Integer> n = new ArrayList<>(Arrays.asList(1,2,3,4,5));
getCombination(n,3);
}
private static Set<ArrayList<Integer>> getCombination(ArrayList<Integer> n, Integer r) {
Set<ArrayList<Integer>> ans = new HashSet<ArrayList<Integer>>();
combination(n, r, ans);
for (ArrayList<Integer> e : ans) {
System.out.println(e.toString());
}
return ans;
}
private static void combination(ArrayList<Integer> n, Integer r, Set<ArrayList<Integer>> ans) {
if (n.size() == r) {
ans.add(n);
return;
}
for (int i = 0; i < n.size(); i++) {
ArrayList<Integer> N = new ArrayList<Integer>();
N.addAll(n);
N.remove(i);
combination(N,r,ans);
}
}
}
我知道ruby有require 'set'
def combi(n, r, ans)
if n.size == r
ans.add(n)
return
end
for i in 0..n.size
arr = n.dup
arr.delete_at(i)
combi(arr, r, ans)
end
end
def get_combination(n, r)
ans = Set.new
combi(n, r, ans)
#ans.map do |e|
# puts e.to_s
#end
ans
end
n1 = [1,2,3,4,5]
get_combination(n1, 3)
方法,但这不是问题。
答案 0 :(得分:2)
在这部分:
Number of predicates: 9
noun
non-noun
non-noun
你的红宝石cody,你包括在内。这必须专门用'...'制作代码
for i in 0..n.size
arr = n.dup
arr.delete_at(i)
combi(arr, r, ans)
end
然后你的代码工作正常!