前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数竞选手联名,要求公开姜萍答卷

数竞选手联名,要求公开姜萍答卷

作者头像
宫水三叶的刷题日记
发布2024-06-26 09:32:57
1060
发布2024-06-26 09:32:57
举报
文章被收录于专栏:宫水三叶的刷题日记
  1. 希望组委会、姜萍和王闰秋(男,姜萍老师)同意,将姜萍的初赛答卷公开给其他入围决赛的选手查阅
  2. 希望组委会和第三方专家一起,独立调查此事,并公开调查结果

主战场在知乎,目前该问题有极高的关注热度。

据 Richard Xu 本人最新回应的进展是:尚未得到阿里巴巴组委会的回应。

目前还不知道事情会往哪个方向发展,大家觉得阿里会对请示信作出什么回应?

...

回归主线。

来一道稍稍麻烦的模拟题。

题目描述

平台:LeetCode

题号:640

求解一个给定的方程,将 x 以字符串 "x=#value" 的形式返回。

该方程仅包含 '+''-' 操作,变量 x 和其对应系数。

如果方程没有解,请返回 "No solution"。如果方程有无限解,则返回 "Infinite solutions"

题目保证,如果方程中只有一个解,则 'x' 的值是一个整数。

示例 1:

代码语言:javascript
复制
输入: equation = "x+5-3+x=6+x-2"

输出: "x=2"

示例 2:

代码语言:javascript
复制
输入: equation = "x=x"

输出: "Infinite solutions"

示例 3:

代码语言:javascript
复制
输入: equation = "2x=x"

输出: "x=0"

提示:

3 <= equation.length <= 1000
  • equation 只有一个 '='.
  • equation 方程由整数组成,其绝对值在
[0, 100]

范围内,不含前导零和变量 'x'

模拟

为了方便,我们令 equations

由于运算符只有 +-,因此无须考虑运算优先级,可在遍历过程中进行计算。

使用变量 xnum 分别代指当前运算结果中 x 的系数以及数值部分,从前往后处理 s 的每个字符,根据字符类型进行分情况讨论,假设当前处理到的数值为

s[i]

s[i] =

+/-:此时影响的是下一个运算数值的正负,修改对应的 op 标识;

s[i] =

数值:此时将完整的运算值进行取出(运算值可能是关于

x

的描述,可能是纯数值),假设连续段

s[i:j - 1]

之间为当前运算值,根据

s[j - 1]

是否为字符 x 可知,是要将

s[i:j - 2]

的数值累加到变量 x,还是将

s[i:j - 1]

的数值累加到变量 num

s[i] =

=:此时代表方程的左边已处理完,将变量 xnum 进行翻转(含义为将左边的运算结果移项到右边),并继续往后处理。

当整个字符串 s 处理完后,我们得到最终关于 x 的系数 x,以及数值大小 num

根据 x 是否为 0 可知答案:

  • x
0

:此时根据 num 是否为

0

可知是 Infinite solutions(对应 num

0

) 还是 No solution(对应 num 不为

0

  • x 不为
0

:对 xnum 进行约分后,返回对应答案。

Java 代码:

代码语言:javascript
复制
class Solution {
    public String solveEquation(String s) {
        int x = 0, num = 0, n = s.length();
        char[] cs = s.toCharArray();
        for (int i = 0, op = 1; i < n; ) {
            if (cs[i] == '+') {
                op = 1; i++;
            } else if (cs[i] == '-') {
                op = -1; i++;
            } else if (cs[i] == '=') {
                x *= -1; num *= -1; op = 1; i++;
            } else {
                int j = i;
                while (j < n && cs[j] != '+' && cs[j] != '-' && cs[j] != '=') j++;
                if (cs[j - 1] == 'x') x += (i < j - 1 ? Integer.parseInt(s.substring(i, j - 1)) : 1) * op;
                else num += Integer.parseInt(s.substring(i, j)) * op;
                i = j;
            }
        }
        if (x == 0) return num == 0 ? "Infinite solutions" : "No solution";    
        else return "x=" + (num / -x);
    }
}

C++ 代码:

代码语言:javascript
复制
class Solution {
public:
    string solveEquation(string s) {
        int x = 0, num = 0, n = s.length();
        for (int i = 0, op = 1; i < n; ) {
            if (s[i] == '+') {
                op = 1; i++;
            } else if (s[i] == '-') {
                op = -1; i++;
            } else if (s[i] == '=') {
                x *= -1; num *= -1; op = 1; i++;
            } else {
                int j = i;
                while (j < n && s[j] != '+' && s[j] != '-' && s[j] != '=') j++;
                if (s[j - 1] == 'x') x += (i < j - 1 ? stoi(s.substr(i, j - i - 1)) : 1) * op;
                else num += stoi(s.substr(i, j)) * op;
                i = j;
            }
        }
        if (x == 0) return num == 0 ? "Infinite solutions" : "No solution";
        else return "x=" + to_string(-num / x);
    }
};

Python 代码:

代码语言:javascript
复制
class Solution:
    def solveEquation(self, s: str) -> str:
        x, num, n = 0, 0, len(s)
        i, op = 0, 1
        while i < n:
            if s[i] == '+':
                op, i = 1, i + 1
            elif s[i] == '-':
                op, i = -1, i + 1
            elif s[i] == '=':
                x, num, op, i = x * -1, num * -1, 1, i + 1
            else:
                j = i
                while j < n and s[j] not in '+-=':
                    j += 1
                if s[j - 1] == 'x':
                    x += (int(s[i:j - 1]) if i < j - 1 else 1) * op
                else:
                    num += int(s[i:j]) * op
                i = j
        if x == 0:
            return "Infinite solutions" if num == 0 else "No solution"
        else:
            return f"x={num // -x}"

TypeScript 代码:

代码语言:javascript
复制
function solveEquation(s: string): string {
    let x = 0, num = 0, n = s.length
    for (let i = 0, op = 1; i < n; ) {
        if (s[i] == '+') {
            op = 1; i++;
        } else if (s[i] == '-') {
            op = -1; i++
        } else if (s[i] == '=') {
            x *= -1; num *= -1; op = 1; i++;
        } else {
            let j = i
            while (j < n && s[j] != '+' && s[j] != '-' && s[j] != '=') j++
            if (s[j - 1] == 'x') x += (i < j - 1 ? Number(s.substring(i, j - 1)) : 1) * op
            else num += Number(s.substring(i, j)) * op
            i = j
        }
    }
    if (x == 0) return num == 0 ? "Infinite solutions" : "No solution"    
    else return "x=" + (num / -x)
};
  • 时间复杂度:
O(n)
  • 空间复杂度:使用 charAt 替换 toCharArray。复杂度为
O(1)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 宫水三叶的刷题日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 模拟
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档