华为od机试遇到的,没做完。应该是力扣plus题目我没会员看不到,在外面3小时做出来了。我是个five
public static int a(String s) {
s =s.replace(" ","");
char[] charArray = s.toCharArray();
LinkedList<String> z = new LinkedList<>();
LinkedList<String> js = new LinkedList<>();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < charArray.length; i++) {
if(charArray[i] == '*' || charArray[i] == '/' || charArray[i] == '+' || charArray[i] == '-' || charArray[i] == '(' ){
if (!stringBuilder.isEmpty()) {
z.addLast(stringBuilder.toString());
stringBuilder.delete(0, stringBuilder.length());
}
z.addLast(charArray[i]+"");
}else if(charArray[i] == ')'){
if (!stringBuilder.isEmpty()) {
z.addLast(stringBuilder.toString());
stringBuilder.delete(0, stringBuilder.length());
}
while (!"(".equals(z.peekLast())){
js.addFirst(z.pollLast());
}
z.pollLast();
z.addLast(String.valueOf(calculate(js)));
js.clear();
}else {
stringBuilder.append(charArray[i]);
if (i == charArray.length - 1) {
z.addLast(stringBuilder.toString());
stringBuilder.delete(0, stringBuilder.length());
}
}
}
return calculate(z);
}
public static int calculate(LinkedList<String> s) {
LinkedList<Integer> nums = new LinkedList<>();
LinkedList<String> fh = new LinkedList<>();
StringBuilder stringBuilder = new StringBuilder();
boolean jisuan = false;
for (int i = 0; i < s.size(); i++) {
if ("*".equals(s.get(i)) || "/".equals(s.get(i)) || "+".equals(s.get(i)) || "-".equals(s.get(i))) {
if (!stringBuilder.isEmpty()) {
nums.addLast(Integer.valueOf(stringBuilder.toString()));
stringBuilder.delete(0, stringBuilder.length());
if (jisuan) {
Integer num2 = nums.pollLast();
Integer num1 = nums.pollLast();
nums.addLast(jisuan(num1, num2, fh.pollLast()));
jisuan = false;
}
}
if ("*".equals(s.get(i)) || "/".equals(s.get(i)) ) {
jisuan = true;
fh.addLast(s.get(i));
} else {
fh.addLast(s.get(i));
}
} else {
stringBuilder.append(s.get(i));
if (i == s.size() - 1 && !stringBuilder.isEmpty()) {
nums.addLast(Integer.valueOf(stringBuilder.toString()));
stringBuilder.delete(0, stringBuilder.length());
if (jisuan) {
Integer num2 = nums.pollLast();
Integer num1 = nums.pollLast();
nums.addLast(jisuan(num1, num2, fh.pollLast()));
jisuan = false;
}
}
}
}
while (nums.size() != 1) {
Integer num1 = nums.pollFirst();
Integer num2 = nums.pollFirst();
nums.addFirst(jisuan(num1, num2, fh.pollFirst()));
}
return nums.peek();
}
public static Integer jisuan(Integer i, Integer j, String fuhao) {
Integer value = null;
if ("+".equals(fuhao)) {
value = i + j;
} else if ("-".equals(fuhao)) {
value = i - j;
} else if ("*".equals(fuhao)) {
value = i * j;
} else if ("/".equals(fuhao)) {
value = i / j;
}
return value;
}
华为od机试计算器带括号加减乘除“+-*/()”
于 2023-12-12 09:11:21 首次发布
文章讲述了作者在解决华为力扣plus题目时,解析并计算字符串形式的算术表达式的过程,涉及字符替换、链表操作和递归函数jisuan。
363

被折叠的 条评论
为什么被折叠?



