【发布时间】:2015-01-11 21:44:31
【问题描述】:
我的问题是:
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的(内容) -
那么,java是通过引用还是通过值传递arraylist?
-
你试过
res.add(r.clone());吗? -
@BufBills Java 总是按值传递; 然而任何
Object的值都是它的参考地址。根据定义,List是Object。
标签: java