我正在学习数据结构和算法,我可以递归解决,我也明白要添加到备忘表中以节省重复,我做起来很麻烦,如果能给我一些意见会很有帮助。如果你也能实现集图的解决方案,那也很好,但我主要是想找数组的解决方案,供以后参考。我想可能是因为在传递数组的同时,并没有通过引用来传递,因为c++没有这样做,如果是向量会不会是更好的选择呢?我试过了,但也没能让它成功。而Java中的数组解决方案,确实可以通过引用传递数组,但也不行,所以我做错了什么。
代码。
long long int combinMemo(int n, int k, int memo[]) {
if (k == 0) return 1;
if (n == k) return 1;
if(n < k || (n <= 0)) return 0;
if(memo[k] == 0) {
return memo[k] = (combinMemo(n - 1, k - 1, memo)) + combinMemo(n - 1, k, memo); //+ combinMemo(n - 1, k, memo));
} else {
return memo[k];
}
}
long long int combinMemoWrap(int n, int k) {
int memo[k + 1];
for(int i = 0; i < k + 1; i++) {
memo[i] = 0;
}
return combinMemo(n, k, memo);
}