讨论/题目交流/leetcode 第224题 基本计算器 测试用例问题 小白新手求解答/
leetcode 第224题 基本计算器 测试用例问题 小白新手求解答

简介

测试用例问题.png

题意说的是字符串包含:+ - * / ( ) 和 非负整数 和空格 所以按理说 这个测试用例 "2-((5-6)*(2-3))" 应该是符合题意的
但是用这个测试用例 LeetCode后台跑出来的结果是2 实际应该是1 后台的所有测试用例好像没有考虑这种情况? 或者题意说明一下 括号内计算结果非负?

代码

使用一段 行内代码

代码片段

<!-- 新手小白的代码 -->
public class Main {
public static void main(String[] args) {
public int calculate(String s) {
return process(0,s)[0];
}
private int[] process(int index,String s) {
int i = index;
String temp = "";
while(i<s.length()){
if(s.charAt(i)=='(') {
int[] subProcess = process(i+1,s);
temp += subProcess[0];
i = subProcess[1];
}
else if(s.charAt(i)==')') {
return new int[] {calculate01(temp),i+1};
}else {
temp += s.charAt(i++);
}
}
return new int[] {calculate01(temp),0};
}
<!-- 无括号计算表达式 -->
private static int calculate01(String s) {
int start = 0;
while(start<s.length() && s.charAt(start)==' ') {
start++;
}
if(start==s.length()) {
return 0;
}
LinkedList<String> list = new LinkedList<>();
String temp = "";
for(int i=start;i<s.length();i++){
if(s.charAt(i)==' ') {
continue;
}
if(i==start) {
temp = s.charAt(start)+"";
i++;
}
while(i<s.length() && s.charAt(i)>='0' && s.charAt(i)<='9'){
temp += s.charAt(i);
i++;
}
while(i<s.length() && s.charAt(i)==' ') {
i++;
}
if(!list.isEmpty()){
if(list.peekLast().equals("*")){
if(temp.equals("")) {
temp = "-";
continue;
}
list.pollLast();
int product = Integer.valueOf(list.pollLast()) * Integer.valueOf(temp);
list.add(String.valueOf(product));
}
else if(list.peekLast().equals("/")){
if(temp.equals("")) {
temp = "-";
continue;
}
list.pollLast();
int product = Integer.valueOf(list.pollLast()) / Integer.valueOf(temp);
list.add(String.valueOf(product));
}else if(!temp.equals("")){
list.add(temp);
}
}else{
list.add(temp);
}
if(i<s.length()){
list.add(String.valueOf(s.charAt(i)));
}
temp = "";
}
int result = Integer.valueOf(list.pollFirst());
while(!list.isEmpty()){
temp = "";
if(list.peekFirst().equals("+")){
list.pollFirst();
if(list.peekFirst().equals("-")) {
list.pollFirst();
if(list.peekFirst().charAt(0)=='-') {
temp = list.pollFirst().substring(1);
}else {
temp = "-" + list.pollFirst();
}
result += Integer.valueOf(temp);
}else {
result += Integer.valueOf(list.pollFirst());
}
}
else if(list.peekFirst().equals("-")){
list.pollFirst();
if(list.peekFirst().equals("-")) {
list.pollFirst();
if(list.peekFirst().charAt(0)=='-') {
temp = list.pollFirst().substring(1);
}else {
temp = "-" + list.pollFirst();
}
result -= Integer.valueOf(temp);
}else {
result -= Integer.valueOf(list.pollFirst());
}
}
}
return result;
}
}
}

展开讨论

石沉大海么。。

1