week29
282 - 给表达式添加运算符
+ 如果后面是 + : (a + b * c) + 1 * _
+ 如果后面是 - : (a + b * c) + -1 * _
+ 如果后面是 * : a + (b * c) * _using LL = long long;
class Solution {
public:
vector<string> ans;
string path;
LL target;
public:
vector<string> addOperators(string num, int target) {
path.resize(100);
this->target = target;
dfs(num, 0, 0, 0, 1); // 最开始 0 + 1 * _
return ans;
}
void dfs(string num, int u, int len, LL a, LL b)
{
if(u == num.size())
{
if(a == target) ans.push_back(path.substr(0, len - 1)); // 除去最后一个加号
}
else
{
LL c = 0;
for(int i = u; i < num.size(); i++)
{
c = c * 10 + num[i] - '0';
path[len++] = num[i];
// +
path[len] = '+';
dfs(num, i + 1, len + 1, a + b * c, 1);
if(i + 1 < num.size())
{
// -
path[len] = '-';
dfs(num, i + 1, len + 1, a + b * c, -1);
// *
path[len] = '*';
dfs(num, i + 1, len + 1, a, b * c);
}
// ! 注意这里前导0的情况
if(num[u] == '0') break;
}
}
}
};283 - 移动0
284 - 顶端迭代器
287 - 寻找重复数
289 - 生命游戏
290 - 单词规律
Last updated