439 三元表示式解析器

2021-10-09 20:35:30 字數 1617 閱讀 4498

題目描述:

給定乙個以字串表示的任意巢狀的三元表示式,計算表示式的值。你可以假定給定的表示式始終都是有效的並且只包含數字 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"

方法1:

主要思路:

(1)每次找出當前需要判斷的三元表示式的三部分,後面兩部分使用和?匹配的:進行分割,注意匹配的關係;

(2)根據第乙個表示式是t或f決定使用後面兩部分中的哪乙個作為下一次需要判斷的表示式,來進行遞迴的呼叫,知道表示式的長度為1時,直接返回結果;

class

solution

//輔助變數,找出當前三元表示式的對應的 :的位置

int pos=2;

int counts=0;

while

(possize()

)else

if(expression[pos]

==':'

)--counts;

}++pos;

}//根據起始的字元是t或f,決定遞迴判斷下乙個表示式

if(expression[0]

=='t'

)return

parseternary

(expression.

substr

(pos+1)

);}}

;

三元表示式

c 中有乙個三元運算子 語法為 條件表示式?表示式1 表示式2 該操作首先求出條件表示式的值 bool型別 為true時呼叫表示式1,為flase時呼叫表示式2。其邏輯為 如果為真執行第乙個,否則執行第二個。例項 string result name 老趙 帥的掉渣了 山炮掉渣了 dic.add d...

三元表示式

採用三元操作符對?對表示式進行運算,這種操作符比較特別,因為它有三個操作物件,但它確實屬於操作符的一種,它最終也會生成乙個值。其表示式採取下述形式 boolean exp value0 value1 原型比較大小 string result int i 5,j 10 if i j result su...

三元表示式

有段時間沒有跟進東西了,說明我沒有進步,三元表示式真的挺好用的,有的地方沒法用if else進行判斷,用這個很方便,之前上學的時候學過這個,由於這個知識點很小,盡然被我忘了,上次寫東西我想了好久,在那裡邊沒法進行判斷,後來人家給我說用三元表示式啊,我愣住了,三元表示式,不知道是啥,人家也不給我說,直...