可以列舉所有的運算子的位置,然後遞迴算出該運算子左右的表示式所有可能的取值,然後對所有可能的取值進行計算。
首先,我們需要把原字串input中的所有數字和運算子都放到乙個vector裡,因為每個數字的長度不確定,所以放到
vector裡方便我們進行計算。
然後寫乙個計算expr某段區間的所有表示式的可能結果(用vector儲存)的函式dfs,之後,我們再列舉expr中所有的運算子,
遞迴算出當前運算子左右兩側所有表示式的取值,得到兩個陣列left和right,分別表示左右兩段所有可能的表示式的值,再從兩個
陣列中分別取出乙個值進行計算(計算是什麼取決於當前運算子是什麼),把結果壓入結果陣列res中,遍歷完兩個陣列之後就返回res
陣列作為dfs函式的返回值。
最終的答案就是dfs(0, expr.size() - 1),表示所有可能表示式的取值。
class solution ;
}vectorres;
for(int i = l + 1; i < r; i += 2) else if(expr[i] == "-") else if(expr[i] == "*") }}
}return res;
}vectordiffwaystocompute(string input)
expr.push_back(input.substr(i, j - i)); //j-i是當前這個數字的長度
i = j - 1;
} else
}return dfs(0, expr.size() - 1); //返回字串所有可能的表示式的取值}};
leetcode 241 為運算表示式設計優先順序
給定乙個含有數字和運算子的字串,為表示式新增括號,改變其運算優先順序以求出不同的結果。你需要給出所有可能的組合的結果。有效的運算符號包含 以及 輸入 2 1 1 輸出 0,2 解釋 2 1 1 0 2 1 1 2輸入 2 3 4 5 輸出 34,14,10,10,10 解釋 2 3 4 5 34 2...
leetcode241 為運算表示式設計優先順序
遍歷字串,遇到運算子,就可形成乙個分組,分別計算當前運算子的左部分和右部分,然後將得到的結果進行運算。此時左部分和右部分運算的結果又可按照他們當中的運算子進行計算,因此會對應的形成他們的list,其中儲存著可能的結果。所以在 實現的時候,用list接收左右部分的計算結果。然後分別遍歷兩個list的數...
241 為運算表示式設計優先順序
思路 分治法 不同位置新增括號的作用在於改變不同運算子的優先順序。所以,可以在遍歷的過程中依次把運算子設為第一優先順序,遞迴計算左邊和右邊。class solution def diffwaystocompute self,input str list int if input isdigit 全數...