日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode--150. 逆波兰表达式求值

發(fā)布時間:2024/7/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode--150. 逆波兰表达式求值 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

根據(jù)逆波蘭表示法,求表達式的值。

有效的運算符包括?+,?-,?*,?/?。每個運算對象可以是整數(shù),也可以是另一個逆波蘭表達式。

說明:

整數(shù)除法只保留整數(shù)部分。
給定逆波蘭表達式總是有效的。換句話說,表達式總會得出有效數(shù)值且不存在除數(shù)為 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

一道棧的題,

逆波蘭表示法對于基本的四則運算沒有優(yōu)先級的限制,所以對于本題而言,運算符的優(yōu)先順序完全是看運算符在tokens表達式內(nèi)出現(xiàn)的先后順序來決定的。定義一個棧,一次遍歷tokens表達式,如果是數(shù)字則進棧,如果是運算符,則將棧stack內(nèi)前兩個棧頂元素出棧,進行相應(yīng)運算。

提交的代碼:

class Solution {
? ? public int evalRPN(String[] tokens) {
? ? ? ? ?int n = tokens.length;
?? ??? ? int i,j=0,sum,m,k;
?? ??? ? int[] nums = new int[n];
?? ??? ? for(i=0;i<n;i++)
?? ??? ? {
?? ??? ??? ? sum=0;
?? ??? ??? ? m = tokens[i].length();
?? ??? ??? ? if(tokens[i].charAt(0)>='0'&&tokens[i].charAt(0)<='9')
?? ??? ??? ? {
?? ??? ??? ??? ? for(k=0;k<m;k++)
?? ??? ??? ??? ? {
?? ??? ??? ??? ??? ? sum=sum*10+ (tokens[i].charAt(k)-'0');
?? ??? ??? ??? ? }
?? ??? ??? ??? ? nums[j++] = sum;
?? ??? ??? ? }
?? ??? ??? ? else if(tokens[i].charAt(0)=='-'&&m>1)
?? ??? ??? ? {
?? ??? ??? ??? ? for(k=1;k<m;k++)
?? ??? ??? ??? ? {
?? ??? ??? ??? ??? ? sum=sum*10+ (tokens[i].charAt(k)-'0');
?? ??? ??? ??? ? }
?? ??? ??? ??? ? nums[j++] = -sum;
?? ??? ??? ? }
?? ??? ??? ? else if(tokens[i].charAt(0)=='+')
?? ??? ??? ? {
?? ??? ??? ??? ? nums[j-2] = nums[j-2]+nums[j-1];
?? ??? ??? ??? ? j=j-1;
?? ??? ??? ? }
?? ??? ??? ? else if(tokens[i].charAt(0)=='-')
?? ??? ??? ? {
?? ??? ??? ??? ? nums[j-2] = nums[j-2]-nums[j-1];
?? ??? ??? ??? ? j=j-1;
?? ??? ??? ? }
?? ??? ??? ? else if(tokens[i].charAt(0)=='*')
?? ??? ??? ? {
?? ??? ??? ??? ? nums[j-2] = nums[j-2]*nums[j-1];
?? ??? ??? ??? ? j=j-1;
?? ??? ??? ? }
?? ??? ??? ? else if(tokens[i].charAt(0)=='/')
?? ??? ??? ? {
?? ??? ??? ??? ? nums[j-2] = nums[j-2]/nums[j-1];
?? ??? ??? ??? ? j=j-1;
?? ??? ??? ? }
?? ? ? ?}
?? ??? ? return nums[0];
? ? }
}

完整的代碼:


public class Solution150 {
?? ? public static int evalRPN(String[] tokens) {
?? ??? ? int n = tokens.length;
?? ??? ? int i,j=0,sum,m,k;
?? ??? ? int[] nums = new int[n];
?? ??? ? for(i=0;i<n;i++)
?? ??? ? {
?? ??? ??? ? sum=0;
?? ??? ??? ? m = tokens[i].length();
?? ??? ??? ? if(tokens[i].charAt(0)>='0'&&tokens[i].charAt(0)<='9')
?? ??? ??? ? {
?? ??? ??? ??? ? for(k=0;k<m;k++)
?? ??? ??? ??? ? {
?? ??? ??? ??? ??? ? sum=sum*10+ (tokens[i].charAt(k)-'0');
?? ??? ??? ??? ? }
?? ??? ??? ??? ? nums[j++] = sum;
?? ??? ??? ? }
?? ??? ??? ? else if(tokens[i].charAt(0)=='-'&&m>1)
?? ??? ??? ? {
?? ??? ??? ??? ? for(k=1;k<m;k++)
?? ??? ??? ??? ? {
?? ??? ??? ??? ??? ? sum=sum*10+ (tokens[i].charAt(k)-'0');
?? ??? ??? ??? ? }
?? ??? ??? ??? ? nums[j++] = -sum;
?? ??? ??? ? }
?? ??? ??? ? else if(tokens[i].charAt(0)=='+')
?? ??? ??? ? {
?? ??? ??? ??? ? nums[j-2] = nums[j-2]+nums[j-1];
?? ??? ??? ??? ? j=j-1;
?? ??? ??? ? }
?? ??? ??? ? else if(tokens[i].charAt(0)=='-')
?? ??? ??? ? {
?? ??? ??? ??? ? nums[j-2] = nums[j-2]-nums[j-1];
?? ??? ??? ??? ? j=j-1;
?? ??? ??? ? }
?? ??? ??? ? else if(tokens[i].charAt(0)=='*')
?? ??? ??? ? {
?? ??? ??? ??? ? nums[j-2] = nums[j-2]*nums[j-1];
?? ??? ??? ??? ? j=j-1;
?? ??? ??? ? }
?? ??? ??? ? else if(tokens[i].charAt(0)=='/')
?? ??? ??? ? {
?? ??? ??? ??? ? nums[j-2] = nums[j-2]/nums[j-1];
?? ??? ??? ??? ? j=j-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));
?? ? }
}
?

總結(jié)

以上是生活随笔為你收集整理的Leetcode--150. 逆波兰表达式求值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。