对许多软件开发的初学者来说,为了提高自己的编程能力,也为了应对面试,大多数人都会选择LeetCode这个神奇的刷题平台,它提供了海量的算法题目,涵盖了各种编程语言和难度级别,让我们可以在这个平台上练习和学习。
不过,在LeetCode上刷题,我们往往会遇到一些问题,比如题目太难,没有思路,即使直接参考别人给出的最终代码,也无法完全理解。
这时,我们可以用豆包MarsCode AI的刷题助手来帮助我们,在刷题过程中,遇到代码问题,先让AI给出思路,不行再给出参考代码,这样一步一步地完成,可以帮助我们更好地理解和掌握算法。
在MarsCode上刷题不需要安装任何软件,直接在线打开:
左侧选择题目,右侧与AI交互,中间部分写代码运行,当然也可以自己输入题目。
我们选择一个难度中等的经典题目:计算类似3+4*5/(3+2)这样的简单四则运算:
切换到Python语言,然后开始编写代码。
如果完全没有思路,可以先让AI给出提示:
根据提示,我们可以尝试写出代码如下:
def solution(expression):
ops = []
nums = []
for ch in expression:
if '0' <= ch <= '9':
nums.append(int(ch))
elif ch =='(':
ops.append(ch)
elif ch == ')':
top = ops.pop()
while top !='(':
n2 = nums.pop()
n1 = nums.pop()
r = calc(top, n1, n2)
nums.push(r)
def calc(op, n1, n2):
match op:
case '+': return n1 + n2
case '-': return n1 - n2
case '*': return n1 * n2
case '/': return n1 // n2
raise ValueError(f'invalid op: {op}')
写着写着没有思路了怎么办?可以让AI给出代码提示:
注意到AI给出的提示代码不是样板代码,而是根据我们自己编写的代码来改进的,它提示了一个编码错误(应该是append而不是push),补充了一行漏掉的关键代码(ops.append(ch)),将solution()函数写完了,并定义了一个has_higher_priority()函数来比较运算符优先级。
不过这个has_higher_priority()函数扩展性不是很好,我们把它改进一下:
OP_PRIORITY = { '*': 2, '/': 2, '+': 1, '-': 1, '(': 0 }
def has_higher_priority(op1, op2):
return OP_PRIORITY[op1] >= OP_PRIORITY[op2]
这样我们就借助AI完成了所有代码的编写。在线运行一下,可以得到正确的结果,如果结果有误,还可以在线调试,找到错误并修正。
虽然这道编程的题目已经得到解决,但如果我们想要进一步扩展一下,比如计算带有变量的表达式如3+A*5/(B+2),怎么破?
如果没有思路,可以继续让AI给出提示:
AI给出的方案是给solution()函数增加一个dict参数,用于存储变量的值,然后对数字压栈时判断,如果是变量,则取出变量的值再压栈。
根据提示,我们写出最终能处理变量的代码如下:
def solution(expression, vars_dict):
ops = []