題目描述:
給定乙個以字串表示的任意巢狀的三元表示式,計算表示式的值。你可以假定給定的表示式始終都是有效的並且只包含數字 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進行判斷,用這個很方便,之前上學的時候學過這個,由於這個知識點很小,盡然被我忘了,上次寫東西我想了好久,在那裡邊沒法進行判斷,後來人家給我說用三元表示式啊,我愣住了,三元表示式,不知道是啥,人家也不給我說,直...