今天看到一则关于某节跳动员工的爆料,真是让我感慨万千!这位兄弟年薪100多万,手握200万现金,在上海有房有车,还养着一个娃,房贷月供3000,怎么看都觉得是赢家对吧?
按理说,这样的生活不应该让人焦虑才对,但这位兄弟却表示:“压力不大,但内心很焦虑。”
算法题:通配符匹配
输入: "3+2*2"
输出: 7
解释: 3 + (2 * 2) = 7
思路分析
解法
public class BasicCalculator {
public int calculate(String s) {
// 去掉空格
s = s.replaceAll(" ", "");
int n = s.length();
int result = 0; // 最终结果
int sign = 1; // 当前符号,1代表加号,-1代表减号
int num = 0; // 当前的数字
// 遍历字符串中的每个字符
for (int i = 0; i < n; i++) {
char ch = s.charAt(i);
if (Character.isDigit(ch)) {
num = num * 10 + (ch - '0'); // 处理多位数
}
// 如果是运算符或者是最后一个数字
if (i == n - 1 || ch == '+' || ch == '-') {
result += sign * num; // 处理当前数字和符号
num = 0; // 清空当前数字
// 更新符号
if (ch == '+') {
sign = 1;
} else if (ch == '-') {
sign = -1;
}
}
}
return result;
}
}
代码解读
去除空格:首先,我们去掉字符串中的所有空格,避免空格影响我们的运算。 遍历字符串:我们逐个字符地检查输入,遇到数字就拼接成完整的数字。这里的拼接逻辑非常重要,因为我们要处理多位数的情况。 操作符处理:每当遇到一个运算符(加号或减号)时,我们就根据之前记录的符号处理当前的数字。比如当前是正数,就加上当前数字;如果是负数,就减去当前数字。然后,我们将当前数字清零,准备处理下一个数字。 符号更新:每次遇到加号或减号时,我们会更新操作符的状态。如果是加号,就表示接下来数字的符号是正的;如果是减号,接下来数字的符号就是负的。
复杂度分析
可能遇到的坑
数字拼接:数字可能不止一位,所以我们要小心地拼接数字,而不是把每个数字单独处理。 空格问题:虽然题目说明有空格,但空格并不影响运算,所以要小心忽略空格。 符号问题:加号和减号的符号状态需要正确更新,尤其是在处理负数的时候。
小结
-END-
以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言。