华为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 首次发布