一个网站建设多少钱?,中国建设银行网站首页河西网点,金华专业做网站公司,做网站不推广有效果吗文章目录1. 题目2. 解题2.1 递归2.2 循环1. 题目
给定一个以字符串表示的任意嵌套的三元表达式#xff0c;计算表达式的值。
你可以假定给定的表达式始终都是有效的并且只包含数字 0-9, ?, :, T 和 F (T 和 F 分别表示真和假#xff09;。
注意#xff1a; 给定的字符串…
文章目录1. 题目2. 解题2.1 递归2.2 循环1. 题目
给定一个以字符串表示的任意嵌套的三元表达式计算表达式的值。
你可以假定给定的表达式始终都是有效的并且只包含数字 0-9, ?, :, T 和 F (T 和 F 分别表示真和假。
注意 给定的字符串长度 ≤ 10000。 所包含的数字都只有一位数。 条件表达式从右至左结合和大多数程序设计语言类似。 条件是 T 和 F其一即条件永远不会是数字。 表达式的结果是数字 0-9, T 或者 F。
示例 1
输入 T?2:3
输出 2
解释 如果条件为真结果为 2否则结果为 3。示例 2
输入 F?1:T?4:5
输出 4
解释 条件表达式自右向左结合。使用括号的话相当于(F ? 1 : (T ? 4 : 5)) (F ? 1 : (T ? 4 : 5))- (F ? 1 : 4) 或者 - (T ? 4 : 5)- 4 - 4示例 3
输入 T?T?F:5:3
输出 F
解释 条件表达式自右向左结合。使用括号的话相当于(T ? (T ? F : 5) : 3) (T ? (T ? F : 5) : 3)- (T ? F : 3) 或者 - (T ? F : 5)- F - F来源力扣LeetCode 链接https://leetcode-cn.com/problems/ternary-expression-parser 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 2. 解题
2.1 递归
两种符号? :数量相等的时候将字符串切开递归考虑
class Solution {
public:string parseTernary(string expression) {int c1 0, c2 0, n expression.size();for(int i 1; i n; i){if(expression[i]?)c1;else if(expression[i]:)c2;if(c1 c2){return expression[0]T ? parseTernary(expression.substr(2, i-2)) : parseTernary(expression.substr(i1));}}return expression;}
};2.2 循环
参考评论区解答逆序遍历每次 i - 2 找符号 把后面的数压栈把前面的数更新为表达式的值并弹栈
class Solution {
public:string parseTernary(string expression) {stackchar s1;for(int i expression.length() - 1; i 2; i - 2)//找?或者:{if(expression[i-1] :)//当前是 :s1.push(expression[i]);else//当前是?{expression[i-2] expression[i-2] T ? expression[i] : s1.top();// ? 前面 更新为表达式的值s1.pop();}}return string(1,expression[0]);}
};我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号Michael阿明一起加油、一起学习进步