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

LeetCode——241.为运算表达式设计优先级

LeetCode——241.为运算表达式设计优先级

  • 题目:不同优先级组合数字和运算符的所有可能结果
    • 描述
    • 示例
  • 解决方法
  • 代码实现

题目:不同优先级组合数字和运算符的所有可能结果

描述

  给定一个由数字和运算符组成的字符串 expression,按不同优先级组合数字和运算符,计算并返回所有可能组合的结果。你可以按任意顺序返回答案。

提示:

  • 1 <= expression.length <= 20
  • expression 由数字和算符 ‘+’、‘-’ 和 ‘*’ 组成。
  • 输入表达式中的所有整数值在范围 [0, 99]
  • 输入表达式中的所有整数都没有前导 ‘-’ 或 ‘+’ 表示符号。

示例

输入示例:

示例 1:

输入:expression = "2-1-1"
输出:[0,2]
解释:
((2-1)-1) = 0 
(2-(1-1)) = 2

示例 2:

输入:expression = "2*3-4*5"
输出:[-34,-14,-10,-10,10]
解释:
(2*(3-(4*5))) = -34 
((2*3)-(4*5)) = -14 
((2*(3-4))*5) = -10 
(2*((3-4)*5)) = -10 
(((2*3)-4)*5) = 10

解决方法

  1. 可以将字符串中的表达式分成两部分,再分别计算出两边的结果,最后将不同结果进行组合运算。
  2. 表达式拆分后要进行递归处理,直到拆分成单个数字就返回。

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>int* diffWaysToCompute(char* expression, int* returnSize);
int* compute(char* input, int start, int end, int* size);int* diffWaysToCompute(char* expression, int* returnSize) {return compute(expression, 0, strlen(expression) - 1, returnSize);
}int* compute(char* input, int start, int end, int* size) {int* result = NULL;*size = 0;int isNumber = 1;for (int i = start; i <= end; i++) {if (!isdigit(input[i])) {	//判断是否是数字isNumber = 0;break;}}if (isNumber) { //纯数字int num = 0;for (int i = start; i <= end; i++) {num = num * 10 + (input[i] - '0');  //将字符串转化为数字}result = (int*)malloc(sizeof(int));result[0] = num;*size = 1;return result;}for (int i = start; i <= end; i++) {if (input[i] == '+' || input[i] == '-' || input[i] == '*') {int leftSize, rightSize;int* left = compute(input, start, i - 1, &leftSize);	//不包含符号(i)int* right = compute(input, i + 1, end, &rightSize);	//不包含符号(i)for (int l = 0; l < leftSize; l++) {for (int r = 0; r < rightSize; r++) {int val;switch (input[i]) {case '+': val = left[l] + right[r]; break;case '-': val = left[l] - right[r]; break;case '*': val = left[l] * right[r];break;}(*size)++;result = (int*)realloc(result, (*size) * sizeof(int));	//动态开辟空降result[*size - 1] = val;}}free(left);free(right);}}return result;
}void printResults(int* results, int size) {printf("[");for (int i = 0; i < size; i++) {printf("%d", results[i]);if (i < size - 1) {printf(", ");}}printf("]\n");
}int main() {char expression[] = "2-1-1";int returnSize;int* results = diffWaysToCompute(expression, &returnSize);printf("Possible results:\n");for (int i = 0; i < returnSize; i++) {printf("%d ", results[i]);}printf("\n");free(results);return 0;
}
http://www.dtcms.com/a/325997.html

相关文章:

  • 【Maven】02 - 进阶篇
  • Spark AI 算力通平台全球正式上线,引领算力新时代
  • 亚马逊KYC审核“拒死”困局:成因解析与全流程破局策略
  • 数据结构-字符串
  • 人工智能-python-机器学习- 欠拟合与过拟合:岭回归与拉索回归的应用
  • TopLiDM架构解析:DriveVLM如何融合VLM与E2E自动驾驶
  • 一文读懂 C# 中的 Lazy<T>
  • (三十二)-java+ selenium自动化测试-select 下拉框
  • Linux运维学习第十四周
  • wed前端第三次作业
  • 营销 “远交近攻”:开辟市场新天地-中小企实战运营和营销工作室博客
  • MySQL数据库简介
  • 【基本有序数组中找到有且仅有的一个无序元素并进行排序之顺序法】2022-10-12
  • 贪心----3. 跳跃游戏 II
  • 计算机网络:1、OSI参考模型和TCP/IP模型
  • 天塌了!HCIE数通实验预计今年Q4变题,难度再上升?!
  • Linux ethernet驱动移植之常见问题
  • 【Docker-Day 13】超越默认Bridge:精通Docker Host、None与自定义网络模式
  • 从 0 到 1:用 MyCat 打造可水平扩展的 MySQL 分库分表架构
  • 【算法专题训练】11、字符串中的变位词
  • 类和对象(中上)
  • 计算机网络---DNS(域名系统)
  • Go 语言中的切片排序:从原理到实践玩转 sort 包
  • 【第四章:大模型(LLM)】05.LLM实战: 实现GPT2-(6)贪婪编码,temperature及tok原理及实现
  • 云服务器部署SSM项目
  • 逻辑备份恢复工具gs_dump/gs_restore
  • Apache Ignite分片线程池深度解析
  • app,h5,微信,携带传递参数的两种方法getCurrentPages()
  • LAMP/LNMP示例
  • Unknown collation: ‘utf8mb4_0900_ai_ci‘