我的问题是:
ArrayList<String> temp = new ArrayList<String>(r);
没有这一行,我什么也没插入res
?
为什么不复制r
到新的临时文件夹ArrayList
,我什么也不会复制res
?
public class Solution {
public ArrayList<ArrayList<String>> partition(String s) {
ArrayList<ArrayList<String>> res = new ArrayList<ArrayList<String>>();
ArrayList<String> r = new ArrayList<String>();
find(s, 0, r, res);
return res;
}
private void find(String s, int st, ArrayList<String> r, ArrayList<ArrayList<String>> res) {
if (st >= s.length()){
// This seems important. Without the next line, I am inserting
// nothing into "res". Why?
ArrayList<String> temp = new ArrayList<String>(r);
res.add(temp);
return;
} else {
for (int i=st; i<s.length();i++) {
if (isValid(s, st, i)) {
r.add(s.substring(st,i+1));
find(s, i + 1, r, res);
r.remove(r.size()-1);
}
}
}
}
private boolean isValid(String s, int st, int end) {
while (st < end) {
if (s.charAt(st) != s.charAt(end)) {
return false;
}
st++;
end--;
}
return true;
}
}
正如另一个答案所说,这样做:
res.add(r)
r
在列表中添加对同一对象的引用。实际上,这里发生的是:
r
指清单add
res
但是请注意,两者r
和内部的引用res
都指向 同一个对象
当您执行此操作时,temp
会发生以下情况:
r
。temp
add
res
因此,现在r
指向列表的原始副本,而内部引用res
指向列表的新副本。它们是两个不同的对象。
为什么这很重要?
基本上,您的递归步骤向中添加一个元素r
,find
再次调用,然后从中删除一个元素r
。r
和res
中的引用沿递归传递,这意味着这两个相同的对象沿递归传递。
但是由于从递归中返回后,您主动从中删除了一个对象r
,这意味着最后,当您完全向上移动时,内部将不再有元素r
。
由于存储在内部的引用res
指向的 是同一对象
r
,而不是其副本,因此,当您使用删除项目时r.remove()
,该对象将变为空。但这是我们从内部引用的对象res
。因此,在递归结束时,它将为空。
认为它是安全的。A人用金钱装满保险柜。然后,他将B人的第二把钥匙交给保险箱。然后,他用原来的钥匙进入,取出了所有的钱。当B来打开保险柜时,它是空的!
复制此列表等效于A给予B自己的钱以放入自己的保险箱。A可以从自己的保险箱中取出任意多的钱,而且不会改变B保险箱中的钱数。
问题内容: 我有一个包含十个文件的文件夹,我想循环浏览。当我打印出文件名时,我的代码可以正常工作: 哪些打印: 但是,如果我尝试在循环中打开文件,则会出现IO错误: 我是否需要甚至在循环内将文件的完整路径传递给它们? 问题答案: 是的,您需要完整的路径。 是快速修复。正如注释所指出的那样,它会下降到子目录中,因此您确实需要使用当前目录的根目录,而不是用作路径联接的基础。
问题内容: 我正在尝试编写一个与并发应用功能的应用程序。我希望这个函数是一个实例方法(因此我可以在不同的子类中不同地定义它)。这似乎是不可能的。正如我在其他地方了解到的那样,显然不能Pickling绑定方法。那么,为什么以绑定方法作为目标开始?如下代码: 产生以下输出: 为什么进程可以处理绑定方法,但不能处理池? 问题答案: 该模块通常不能腌制实例方法: 但是,该模块具有一个自定义,该自定义添加了
问题内容: 简而言之,我有一个带有ArrayList参数的方法。在该方法中,出于仅与该方法返回的内容相关的目的,我修改了ArrayList的内容。因此,我根本不希望作为参数传递的ArrayList受到影响(即,不作为引用传递)。 我尝试过的一切都未能达到预期的效果。我需要怎么做才能只使用方法内ArrayList的副本,而不能更改实际变量? 问题答案: 即使您有办法将数组列表作为副本而不是通过引用传
问题内容: 为什么经常被称为 代替 ? W3,MDN和MSDN都声明它是可选的。此外,ActiveX控件似乎不需要参数: 这种做法至少可以追溯到2005年的Google Maps中 ,但被缩小了,没有任何解释: 问题答案: 如果您看一下XMLHttpRequest的旧规范,似乎W3C似乎并不需要在某一点上将该参数设为可选,这可能导致人们提供了一个明确的null值,以防万一。 (搜索“应支持发送”)
问题内容: 我的Python程序中有一个保存函数,如下所示: 在此,n为“ 1”。 我收到如下错误: 在外壳中执行相同的加载后,我没有收到任何错误: 为什么会有问题? 问题答案: 您可能从os模块导入了星号: 因此您使用了错误的打开功能。(我想您可以简单地完成,但是可能性较小。)通常,应避免这种导入样式,在实际情况下应避免使用。
问题内容: 我有两节课。和。 我有一个要在中使用的功能。我当时正在考虑将的引用传递给的构造函数,然后再调用该函数。 那行得通吗?有人可以给我举个例子吗? 提前致谢! 问题答案: 是的,它将起作用。这是一种不错的方法。您只需传递A类的 实例 : 然后您可以拥有: