最近在二刷leetcode之前做过的题。对回溯法有新的认识。
之前在做类似于全排列的题,for循环中每一个新的 状态我都会new LinkedList<>(oldlist),然后之后的深度搜索会使用这个list。
但,这个解题方法应该停止,每一个新的状态new一个list会限制增加时间复杂度因为newLinkedList<>(oldlist)会遍历整个数组!
正确的解题行为应该是修改->撤销。
例如全排列的题可以先将int添加进nowlist,然后dfs结束后再remove.!!!
最近在二刷leetcode之前做过的题。对回溯法有新的认识。
之前在做类似于全排列的题,for循环中每一个新的 状态我都会new LinkedList<>(oldlist),然后之后的深度搜索会使用这个list。
但,这个解题方法应该停止,每一个新的状态new一个list会限制增加时间复杂度因为newLinkedList<>(oldlist)会遍历整个数组!
正确的解题行为应该是修改->撤销。
例如全排列的题可以先将int添加进nowlist,然后dfs结束后再remove.!!!