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

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.xdnf.cn/news/17646.html

相关文章:

  • 在 RHEL9 上搭建企业级 Web 服务(Tomcat)
  • Android Audio实战——获取活跃音频类型(十五)
  • 深度学习与遥感入门(五)|GAT 构图消融 + 分块全图预测:更稳更快的高光谱图分类(PyTorch Geometric 实战)
  • 【数据可视化-86】中国育儿成本深度可视化分析(基于《中国统计年鉴2023》数据):用Python和pyecharts打造炫酷可视化大屏
  • 论文阅读 arxiv 2024 MemGPT: Towards LLMs as Operating Systems
  • Apache IoTDB 全场景部署:基于 Apache IoTDB 的跨「端-边-云」的时序数据库 DB+AI
  • Java 之抽象类和接口
  • SSH远程连接TRAE时显示权限被拒绝检查方案
  • 可视化程序设计(4) - 第一个图形窗口程序
  • Java进阶之单列集合Set接口下的通用方法
  • Linux下的软件编程——标准IO
  • ECharts Y轴5等分终极解决方案 - 动态适配缩放场景
  • 后量子密码学的迁移与安全保障:迎接量子时代的挑战
  • NLP---IF-IDF案例分析
  • FreeRTOS学习:优化系统
  • LeetCode_哈希表
  • 论文阅读:Aircraft Trajectory Prediction Based on Residual Recurrent Neural Networks
  • OpenAI正式发布GPT-5:迈向AGI的关键一步
  • sqllabs——Less1
  • MySQL面试题及详细答案 155道(041-060)
  • ThreadLocal有哪些内存泄露问题,如何避免?
  • Mysql笔记-存储过程与存储函数
  • 【Linux】使用静态 BusyBox 解决操作系统“塌方”问题
  • ADK[3]历史对话信息保存机制与构建多轮对话机器人
  • 单片机捷径
  • nginx下lua的实现机制、Lua错误处理、面向对象
  • Unity 遮挡显示效果 Shader
  • 异步问题的概念和消除问题技巧
  • 机器学习 DBScan
  • Java语言简介