LeetCode每日一题
301. 删除无效的括号
解题思路:回溯+剪枝算法
执行用时:2260 ms, 在所有 Python3 提交中击败了9.08%的用户
内存消耗:15.2 MB, 在所有 Python3 提交中击败了54.07%的用户
from typing import List class Solution: def removeInvalidParentheses(self, s: str) -> List[str]: queue = list() results = [len(s),list()] self.trace_back(s, queue, 0, 0, 0, results) return results[1] def trace_back(self, s, queue, index, left_num, remove_num, results): if len(s) == index: if left_num == 0: # print(queue) new_s = "".join(queue) if remove_num == results[0]: if new_s not in results[1]: results[1].append(new_s) elif remove_num < results[0]: results[1] = [new_s] results[0] = remove_num # else: # print("失败的顺序") return # 判断是否为字符串 current_s = s[index] # # 判断是否为")" if current_s == ")": # 选择添加或者移除 if left_num > 0: # 进行添加操作 queue.append(current_s) self.trace_back(s, queue, index + 1, left_num - 1, remove_num,results) queue.pop() # 移除操作 self.trace_back(s, queue, index + 1, left_num, remove_num + 1,results) elif current_s == "(": # 选择添加或移除 # 添加 queue.append(current_s) self.trace_back(s, queue, index + 1, left_num + 1, remove_num,results) queue.pop() # 移除 self.trace_back(s, queue, index + 1, left_num, remove_num,results) else: # 字符的添加 queue.append(s[index]) self.trace_back(s, queue, index + 1, left_num, remove_num,results) queue.pop() if __name__ == '__main__': s = "(a)())()" # s = ")(" # s = "()())()" solution = Solution() parentheses = solution.removeInvalidParentheses(s) print(parentheses)