leetcode 241题

思路
怎么考虑这个问题?我们可以假设所有的运算符为最后一次运算,对算式中所有的运算符做一次枚举,也就是对每个运算符都考虑这是最后一次运算。这样的话,左边递归地去做,右边也同样递归地去做。注意到运算符的两边都一定是数字,所以左右两边本质和整个算式是一样的,只是要短一些,所以可以递归地去做。左右的结果都算出来后,根据乘法原理,左边的所有可能乘上右边的所有可能,最后就可以枚举所有的可能了。下面上代码:
class Solution {
public:
vector<string> parsed;
vector<int> diffWaysToCompute(string expression) {
// 由于输入是一个字符串,我们先预处理出所有的数字和运算符,放到一个vector里面,
// 方便后面的暴搜。
for (int i = 0; i < expression.size(); ++i) {
if (isdigit(expression[i])) {
LeetCode 241题解析:深度优先与卡特兰数

博客详细探讨了LeetCode 241题的解决思路,通过假设运算符为最后一次运算进行递归处理。作者指出,问题与卡特兰数相关,时间复杂度与卡特兰数相联系,因为搜索过程涵盖了所有可能情况,包括合法和非法的括号排列,其差值即为卡特兰数。
最低0.47元/天 解锁文章
2611

被折叠的 条评论
为什么被折叠?



