一直试图找到一种方法来解决this CodeWars challenge,但无法找到检查是否存在例如的方法。连续4个号码。如果我得到2我就可以做到:if (s.get(i) == s.get(i + 1)
但我如何实际检查是否有10个连续数字呢?我不能做s.get(i) == ... == s.get(i + 10)
因为可能有11,所以肯定不是我正在寻找的答案。到目前为止,我已经得到了这个,因为我非常确定我必须遍历所有对象,但不知道如何对我的结果ArrayList进行比较和添加,以便它替换那些连续的数字。
public static List<Integer> sumConsecutives(List<Integer> s) {
List<Integer> result = new ArrayList<Integer>(s);
for (int i : s) {
if () // checking if there are consecutive same numbers
}
}
答案 0 :(得分:1)
这是我能想到的最直接的解决方案:
public static List<Integer> sumConsecutives(List<Integer> s) {
ArrayList<Integer> returnList = new ArrayList<>();
int currentRepeating = 0;
for (int i : s) {
if (returnList.isEmpty() || currentRepeating != i) {
currentRepeating = i;
returnList.add(i);
} else {
returnList.set(returnList.size() - 1, returnList.get(returnList.size() - 1) + i);
}
}
return returnList;
}
对于输入中的每个数字i
,如果当前重复次数不等于i
,请将i
添加到返回列表,并将当前重复次数设置为{{1 }}。如果 等于当前重复的数字,请将其添加到列表中的最后一个元素。