我正在学习数据结构和算法,我可以递归地解决它,并且我知道我必须添加到备忘录表中以保存重复项,但是这样做很麻烦,一些输入非常有帮助。如果您还可以实现set / map解决方案,那也很好,但是我主要是在寻找数组解决方案以供将来参考。我认为这可能是因为在传递数组时,它不是通过引用传递的,因为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);
}