【发布时间】:2020-10-27 22:51:39
【问题描述】:
我正在研究 N Queens 问题和 Generate Parentheses 问题。
当你想要一个List<List<Integer>> 作为结果,并且你想将List<Integer> 添加到它上面时,你需要做一个深拷贝吗?赞result.add(new ArrayList<Integer>(cur))
但是当你想要List<String> 作为结果时,你可以使用result.add(sb.toString())。
为什么将 stringbuilder.toString 添加到列表中不需要深拷贝?
感谢您的宝贵时间
以下是部分代码。它们是递归函数的基本情况。
N 个皇后区:
public void helper(int n, List<Integer> cur, List<List<Integer>> result){
if (cur.size() == n){
**result.add(new ArrayList<Integer>(cur));**
return;
}
生成括号:
private void helper(int n, StringBuilder sb, int left, int right, List<String> result) {
if (sb.length() == n * 2){
**result.add(sb.toString());**
}
【问题讨论】:
-
sb.toString()复制字符串生成器的内容到一个字符串。 -
顺便说一句
new ArrayList<Integer>(cur)是浅拷贝,而不是深拷贝。 -
哦,好的,我明白了。我以为这是浅拷贝
result.add(cur);
标签: java algorithm deep-copy n-queens