1、解析一个字符串的加减乘除运算的出结果。
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()){
int rr= calculate(scanner.nextLine());
System.out.println(rr);
}
}
public static int calculate(String s) {
return calculate(s, 0)[0];
}
// 带括号四则运算 计算从k位置开始的表达式,遇到')'或表达式完停止
private static int[] calculate(String s, int k) {
int res = 0;
int num = 0;
char sign = '+';
Stack<Integer> stack = new Stack<>();
char[] sarr = s.toCharArray();
int i = k;
for (; i < sarr.length && sarr[i] != ')'; i++) {
if (sarr[i] >= '0') {
num = num * 10 + sarr[i] - '0';
}
// 当前遇到非数字字符 | 到达公式结尾 | 下一个是')'都需要进行累计
if ((!Character.isDigit(sarr[i]) && sarr[i] != ' ') || i == sarr.length - 1 || sarr[i + 1] == ')') {
// 遇到左括号时,开始递归过程
if (sarr[i] == '(') {
int[] arr = calculate(s, i + 1);
num = arr[0];
i = arr[1];
}
if (sign == '+' || sign == '-') {
stack.push(sign == '+' ? num : -num);
} else if (sign == '*' || sign == '/') {
int top = stack.pop();
stack.push(sign == '*' ? top * num : top / num);
}
sign = sarr[i];
num = 0;
}
}
while (!stack.isEmpty()) {
res += stack.pop();
}
return new int[] { res, i };
}
2、最大不连续子数组的和
3、二叉树的层次遍历
这个题剑指offer上有这个题,从上往下打印二叉树
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<TreeNode> listTreeNode=new ArrayList<>();
ArrayList<Integer> list1=new ArrayList<>();
if(root==null){
return list1;
}
listTreeNode.add(root);
while (listTreeNode.size()>0){
TreeNode t=listTreeNode.remove(0);
if(t.left!=null){
listTreeNode.add(t.left);
}
if(t.right!=null){
listTreeNode.add(t.right);
}
list1.add(t.val);
}
return list1;
}