当前位置: 首页 > news >正文

营销网站与企业网站的区别电商网站详细设计

营销网站与企业网站的区别,电商网站详细设计,西部数码上传网站,烤肉自助餐网站建设什么是前缀表达式(波兰式) 运算符位于数之前。 比如: 102 对应前缀表达式是 10 2 (4 (13 / 5)) 对应前缀表达式是 4 / 13 5 什么是中缀表达式 我们常用的算数表达式。比如 (4 (13 / 5)),人类很容易计算…

什么是前缀表达式(波兰式)

运算符位于数之前。

比如:

        10+2    对应前缀表达式是     + 10  2

        (4 + (13 / 5))   对应前缀表达式是   +  4  /  13  5  

什么是中缀表达式

我们常用的算数表达式。比如 (4 + (13 / 5)),人类很容易计算出来,但计算机需要进行优先级比较,所以计算机更偏向于前缀或者后缀表达式。

什么是后缀表达式(逆波兰式)

运算符位于数之后。

比如:

        10+2  对应的后缀表达式是   10  2  +

        (4 + (13 / 5))    对应的后缀表达式是   4   13   5   /   +

计算思路

类型示例计算方式
前缀表达式+  4  /  13  5 从右往左读,压入栈中
中缀表达式(4 + (13 / 5))考虑优先级
后缀表达式4   13   5   /   +从左往右读,压入栈中

求解逆波兰表达式

题目描述:给一个逆波兰表达式字符串,求解并返回。

注意:

  • 有效的算符为 '+''-''*' 和 '/' 。
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断 。
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。

示例 :

输入:tokens = ["4","13","5","/","+"]
输出:6
解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6

求解思路:利用栈

class Solution {public int evalRPN(String[] tokens) {Deque<Integer> deque = new ArrayDeque<>();for (int i = 0; i < tokens.length; i++) {if (isOprate(tokens[i])) {int num2 = deque.pop();int num1 = deque.pop();int re = calculate(num1, num2, tokens[i]);deque.push(re);} else {deque.push(Integer.parseInt(tokens[i]));}}return deque.pop();}//操作符判断public boolean isOprate(String str) {return "+".equals(str) || "-".equals(str) || "*".equals(str) || "/".equals(str);}//计算public int calculate(int num1, int num2, String op) {int res = 0;switch (op) {case "+":res = num1 + num2;break;case "-":res = num1 - num2;break;case "*":res = num1 * num2;break;case "/":res = num1 / num2;break;default:break;}return res;}
}

求解波兰表达式

public class Prefix {// 前缀表达式(波兰式)求解public int prefix(String[] tokens) {Deque<Integer> stack = new ArrayDeque<>();for (int i = tokens.length - 1; i >= 0; i--) { //从后往前遍历if (isOperator(tokens[i])) {int num2 = stack.pop();int num1 = stack.pop();stack.push(calculate(num1, num2, tokens[i]));} else {stack.push(Integer.parseInt(tokens[i]));}}return stack.pop();}// 操作符判断public boolean isOperator(String op) {return "+".equals(op) || "-".equals(op) || "*".equals(op) || "/".equals(op);}// 计算public int calculate(int num1, int num2, String op) {switch (op) {case "+":return num1 + num2;case "-":return num1 - num2;case "*":return num1 * num2;case "/":return num1 / num2;default:}return 0;}public static void main(String[] args) {String[] tokens = {"+", "4", "/", "15", "5"};//4+15/5System.out.println(new Prefix().prefix(tokens));}
}

求解中缀表达式:中缀转后缀-》再后缀求解

中缀转后缀的过程:

  • 数字:后缀表达式元素+1。
  • 遇到 ( 左括号:压入栈中。
  • 遇到 ) 右括号:将栈中的元素弹出作为后缀表达式的元素,直到遇到左括号(,再把左括号弹出。
  • 遇到操作符:当前操作符和栈中的操作符比较优先级,优先级高的作为后缀表达式一员,优先级低的入栈。

public class Infix {private static final Map<String, Integer> PRECEDENCE = new HashMap<>();static {PRECEDENCE.put("+", 1);PRECEDENCE.put("-", 1);PRECEDENCE.put("*", 2);PRECEDENCE.put("/", 2);PRECEDENCE.put("^", 3);}// 中缀表达式转后缀表达式public String[] infixToPostfix(String[] tokens) {// 栈用来存放表达式Deque<String> stack = new ArrayDeque();// 后缀表达式StringBuilder postfix = new StringBuilder();for (int i = 0; i < tokens.length; i++) {String token = tokens[i];if (isNumber(token)) {  // 是数字postfix.append(token).append(" ");} else if ("(".equals(token)) {  // 是左括号(stack.push(token);} else if (")".equals(token)) {  // 是右括号)while (!stack.isEmpty() && !"(".equals(stack.peek())) {postfix.append(stack.pop()).append(" ");}stack.pop();} else if (isOperator(token)) {  // 是操作符while (!stack.isEmpty() && isOperator(stack.peek()) &&hasHigherPrecedence(stack.peek(), token)) {postfix.append(stack.pop()).append(" ");}stack.push(token);}}return postfix.toString().split(" ");}// 优先级比较public boolean hasHigherPrecedence(String op1, String op2) {return PRECEDENCE.get(op1) >= PRECEDENCE.get(op2);}// 判断是不是数字private static boolean isNumber(String token) {try {Integer.parseInt(token);return true;} catch (NumberFormatException e) {return false;}}private static boolean isOperator(String token) {return PRECEDENCE.containsKey(token);}public static void main(String[] args) {String infix = "( 3 + 4 ) * 5 - 6";String[] postfix = new Infix().infixToPostfix(infix.split(" "));System.out.println("Infix to Postfix: " + Arrays.toString(postfix));}
}

练习地址:https://leetcode.cn/problems/evaluate-reverse-polish-notation/description/

http://www.dtcms.com/a/425061.html

相关文章:

  • 有哪些网站是织梦做的wordpress写接口
  • 织梦做企业网站apache安装WordPress
  • cdr可以做网站页面吗温岭网络推广公司
  • 微网站 html标点狗logo设计官网
  • 乐清站在哪网站建设价格与方案
  • 单位写材料素材网站营销建设网站
  • php5mysql网站开发实例精讲asp.net 4.0网站开发
  • 山东济铁工程建设集团有限公司网站wordpress树形导航菜单
  • 淘宝客导购网站建设房产信息网显示已备案
  • mq网站开发苏州公司建设网站
  • 建设企业网站目的深圳外贸网站建设服务哪家好
  • 扬中网站优化哪家好wordpress新建阅读量字段
  • 做汽车养护的网站网盟推广和搜索推广的区别
  • 最新手机网站推荐建设网站火车票预订
  • 吉安市建设局施工管理站网站wordpress字体编辑插件下载
  • 网站如何选择服务器做毕业设计哪个网站好
  • Cubic 5分钟定制专属Ubuntu
  • 网站建设初级教程发广告平台有哪些免费
  • 独立开发者如何通过 Toolify.ai 网站寻找新热词
  • 目标网站上做关键字布局网站大全全部免费
  • 安徽省通信建设管理局网站做网站图标的软件
  • 烟台网站建设seo中国服务器排名前十名
  • Load Balance
  • 【深入浅出PyTorch】--3.1.PyTorch组成模块1
  • 上海网站建设哪家强明光网站
  • 网站建设价格标准信息湖南岳阳新增本土确诊0例
  • 建设六马路小学网站制作网站模板
  • 网站数据修改教程济南建网站送400电话
  • 做网站优化邢台网站建设网站
  • 解读DeepSeek新模型DeepSeek*-V3.2-Exp