【算法】小点:List.remove

1、List.remove

在写一道简单递归时发现问题:

cur.add(numsi); dfs(nums,cur,res); cur.remove(numsi); 主要是这三行代码,发现出现指针异常。其实问题是:

List的remove方法有两个重载:remove(int index)和remove(Object o)。

在这里,numsi是int类型,所以调用的是remove(int index)方法,它会移除指定索引位置的元素。

如果当前列表cur的大小为size,那么索引范围是0到size-1。当我们调用cur.remove(numsi)时,如果numsi的值大于等于cur的大小,就会抛出IndexOutOfBoundsException。

所以,在递归回溯时,我们通常移除最后一个元素,所以更常见的写法是:

cur.remove(cur.size()-1);

或者,如果我们知道要移除的对象,也可以使用:

cur.remove(Integer.valueOf(numsi));

2、add(cur)

知道在写回溯的时候,一般会有:List<List<Integer>> res= new ArrayList<>(); List<Integer> cur = new ArrayList<>() ;

然后在dfs中判断添加:res.add 不过要注意,这里面要写 res.add(new ArrayList(cur)); 每次都是新的,否则这个cur是同一个值,每个都一样。

相关推荐
To_OC8 小时前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
05Kevin1 天前
lk每日冒险题--数据结构6.27
算法
To_OC1 天前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
千纸鹤安安2 天前
千问Qwen-AgentWorld来了:一个语言模型搞定七大Agent场景,GPT-5.4都输了
算法
七牛开发者2 天前
MCP 到底是什么?为什么 Agent 都想接上它
算法·aigc·agent
kisshyshy2 天前
从递归到迭代,一文吃透二叉树的核心知识与 JavaScript 实现
javascript·算法·代码规范
To_OC2 天前
LC 49 字母异位词分组:想到哈希表很简单,选对 key 才是精髓
javascript·算法·leetcode