class Solution {
public List<List<Integer>> largeGroupPositions(String S) {
//int k=0;
List<Integer> l1 = new ArrayList<Integer>();
List<List<Integer>> l2 = new ArrayList<List<Integer>>();
int n = S.length();
int count =1, i1=0, i2=0;
for(int i=1; i<n; i++){
if(S.charAt(i)==S.charAt(i-1)){
count++;
}else{
i2 = i-1;
if(count>=3){
l1.add(i1);
l1.add(i2);
l2.add(l1);
}
count =1;
i1=i;
}
}
return l2;
}
}
我需要此输出[[3,5],[6,9],[12,14]]
,但我得到[[3,5,6,9,12,14],[3,5,6,9,12,14],[3,5,6,9,12,14]]
,如果我在其他部分使用l1.clear(),那么更改也会在l2中发生
答案 0 :(得分:0)
您正在将所有整数添加到同一内部列表(您在方法开头使用语句List<Integer> l1 = new ArrayList<Integer>();
创建的那个)。
在向其中添加元素之前,您应该创建一个新的List
:
for(int i=1; i<n; i++) {
if(S.charAt(i)==S.charAt(i-1)) {
count++;
} else {
i2 = i-1;
if(count>=3) {
List<Integer> l1 = new ArrayList<Integer>();
l1.add(i1);
l1.add(i2);
l2.add(l1);
}
count =1;
i1=i;
}
}
答案 1 :(得分:0)
因为你创建了缓存数组(List l1 = new ArrayList();)global。
因此,每次添加时,都会添加到同一个数组中。你不能只清除它,因为你将它添加到l2,清除l1也会清除数组,因为它在l2中。
原因是当你将l1添加到l2时,它不会将l1的值复制到l2中,而是它将l1的指针(或引用)添加到l2 中。所以它实际上只有一个支持阵列。
尝试这样的事情:
class Solution {
public List<List<Integer>> largeGroupPositions(String S) {
//int k=0;
List<List<Integer>> l2 = new ArrayList<List<Integer>>();
int n = S.length();
int count =1, i1=0, i2=0;
for(int i=1; i<n; i++){
List<Integer> l1 = new ArrayList<Integer>();
if(S.charAt(i)==S.charAt(i-1)){
count++;
}else{
i2 = i-1;
if(count>=3){
List<Integer> l1 = new ArrayList<Integer>();
l1.add(i1);
l1.add(i2);
l2.add(l1);
}
count =1;
i1=i;
}
}
return l2;
}