241. Different Ways to Add Parentheses
package LeetCode_241 import java.util.* import kotlin.collections.ArrayList /** * 241. Different Ways to Add Parentheses * https://leetcode.com/problems/different-ways-to-add-parentheses/description/ * Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. * The valid operators are +, - and *. * Example 1: Input: "2-1-1" Output: [0, 2] Explanation: ((2-1)-1) = 0 (2-(1-1)) = 2 Example 2: Input: expression = "2*3-4*5" Output: [-34,-14,-10,-10,10] Explanation: (2*(3-(4*5))) = -34 ((2*3)-(4*5)) = -14 ((2*(3-4))*5) = -10 (2*((3-4)*5)) = -10 (((2*3)-4)*5) = 10 Constraints: 1. 1 <= expression.length <= 20 2. expression consists of digits and the operator '+', '-', and '*'. * */ class Solution { /* * solution:DFS, Memorization with map, split each char to check it digit or symbol and calculate value with operations from left to right * Time:O(n*2^n), Space:O(2^n) * */ fun diffWaysToCompute(expression: String): List<Int> { val map = HashMap<String, List<Int>>() return dfs(expression, map) } private fun dfs(expression: String, map: HashMap<String, List<Int>>): List<Int> { if (map.containsKey(expression)){ return map.getOrDefault(expression, ArrayList<Int>()) } val values = ArrayList<Int>() if (!hasOperations(expression)) { //just put digit in values values.add(expression.toInt()) } else { for (i in expression.indices) { val c = expression[i] if (!c.isDigit()) { val left = dfs(expression.substring(0, i), map) //substring form current i to the end val right = dfs(expression.substring(i + 1), map) //check each digit from left sub list and right sub list for (l in left) { for (r in right) { when (c) { '+' -> values.add(l + r) '-' -> values.add(l - r) '*' -> values.add(l * r) } } } } } } //save into map for next level map.put(expression, values) return values } private fun hasOperations(expression: String):Boolean{ for (c in expression){ if (c=='+' || c=='-' || c=='*'){ return true } } return false } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)