做ppt的图片网站,天津网站设计公司,网站续费能自己续费吗,网站运营的主要内容根据逆波兰表示法#xff0c;求表达式的值。
有效的运算符包括 , -, *, / 。每个运算对象可以是整数#xff0c;也可以是另一个逆波兰表达式。
说明#xff1a;
整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说#xff0c;表达式总会得出有效数值且不存…根据逆波兰表示法求表达式的值。
有效的运算符包括 , -, *, / 。每个运算对象可以是整数也可以是另一个逆波兰表达式。
说明
整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说表达式总会得出有效数值且不存在除数为 0 的情况。 示例 1
输入: [2, 1, , 3, *] 输出: 9 解释: ((2 1) * 3) 9 示例 2
输入: [4, 13, 5, /, ] 输出: 6 解释: (4 (13 / 5)) 6 示例 3
输入: [10, 6, 9, 3, , -11, *, /, *, 17, , 5, ] 输出: 22 解释: ((10 * (6 / ((9 3) * -11))) 17) 5 ((10 * (6 / (12 * -11))) 17) 5 ((10 * (6 / -132)) 17) 5 ((10 * 0) 17) 5 (0 17) 5 17 5 22
一道栈的题
逆波兰表示法对于基本的四则运算没有优先级的限制所以对于本题而言运算符的优先顺序完全是看运算符在tokens表达式内出现的先后顺序来决定的。定义一个栈一次遍历tokens表达式如果是数字则进栈如果是运算符则将栈stack内前两个栈顶元素出栈进行相应运算。
提交的代码
class Solution { public int evalRPN(String[] tokens) { int n tokens.length; int i,j0,sum,m,k; int[] nums new int[n]; for(i0;in;i) { sum0; m tokens[i].length(); if(tokens[i].charAt(0)0tokens[i].charAt(0)9) { for(k0;km;k) { sumsum*10 (tokens[i].charAt(k)-0); } nums[j] sum; } else if(tokens[i].charAt(0)-m1) { for(k1;km;k) { sumsum*10 (tokens[i].charAt(k)-0); } nums[j] -sum; } else if(tokens[i].charAt(0)) { nums[j-2] nums[j-2]nums[j-1]; jj-1; } else if(tokens[i].charAt(0)-) { nums[j-2] nums[j-2]-nums[j-1]; jj-1; } else if(tokens[i].charAt(0)*) { nums[j-2] nums[j-2]*nums[j-1]; jj-1; } else if(tokens[i].charAt(0)/) { nums[j-2] nums[j-2]/nums[j-1]; jj-1; } } return nums[0]; } }
完整的代码 public class Solution150 { public static int evalRPN(String[] tokens) { int n tokens.length; int i,j0,sum,m,k; int[] nums new int[n]; for(i0;in;i) { sum0; m tokens[i].length(); if(tokens[i].charAt(0)0tokens[i].charAt(0)9) { for(k0;km;k) { sumsum*10 (tokens[i].charAt(k)-0); } nums[j] sum; } else if(tokens[i].charAt(0)-m1) { for(k1;km;k) { sumsum*10 (tokens[i].charAt(k)-0); } nums[j] -sum; } else if(tokens[i].charAt(0)) { nums[j-2] nums[j-2]nums[j-1]; jj-1; } else if(tokens[i].charAt(0)-) { nums[j-2] nums[j-2]-nums[j-1]; jj-1; } else if(tokens[i].charAt(0)*) { nums[j-2] nums[j-2]*nums[j-1]; jj-1; } else if(tokens[i].charAt(0)/) { nums[j-2] nums[j-2]/nums[j-1]; jj-1; } } return nums[0]; } public static void main(String[] args) { //String[] x {2, 1, , 3, *}; // String[] x {4, 13, 5, /, }; String[] x {10, 6, 9, 3, , -11, *, /, *, 17, , 5, }; System.out.println(evalRPN(x)); } }