python 布林運算

2021-10-24 20:22:00 字數 2417 閱讀 7340

給定乙個布林表示式和乙個期望的布林結果 result,布林表示式由 0

(false)、1

(true)、&

(and)、 |

(or) 和 ^

(xor) 符號組成。實現乙個函式,算出有幾種可使該表示式得出 result 值的括號方法。

示例 1

:輸入: s =

"1^0|0|1"

, result =

0輸出:

2解釋: 兩種可能的括號方法是1^

(0|(

0|1)

)1^(

(0|0

)|1)

示例 2

:輸入: s =

"0&0&0&1^1|0"

, result =

1輸出:

10運算子的數量不超過 19 個

一、記憶化遞迴

lru_cache可以記錄函式的呼叫結果。

根據結果分類:

result = 1: 0&0 + 0&1 + 1&0/0|0/ 1^1

result = 0: 1&1/1|1 + 0|1 + 1|0/1^ 0 + 0^1

class solution

: and =

'&' or =

'|' xor =

'^' @lru_cache(

none

)def

counteval

(self, s:

str, result:

int)

->

int:

iflen

(s)<=3:

return

int(

eval

(s)== result)

res =

0for i in

range(1

,len

(s),2)

: symbol = s[i]

if result ==0:

if symbol == self.and:

# 0&0 + 0&1 + 1&0

res += self.counteval(s[

:i],0)

*self.counteval(s[i+1:

],0)

+ self.counteval(s[

:i],0)

*self.counteval(s[i+1:

],1)

+ self.counteval(s[

:i],1)

*self.counteval(s[i+1:

],0)

elif symbol == self.or:

# 0|0

res += self.counteval(s[

:i],0)

*self.counteval(s[i+1:

],0)

elif symbol == self.xor:

# 0^0 + 1^1

res += self.counteval(s[

:i],0)

*self.counteval(s[i+1:

],0)

+ self.counteval(s[

:i],1)

*self.counteval(s[i+1:

],1)

else

:if symbol == self.and:

# 1&1

res += self.counteval(s[

:i],1)

*self.counteval(s[i+1:

],1)

elif symbol == self.or:

# 1|1 + 0|1 + 1|0

res += self.counteval(s[

:i],1)

*self.counteval(s[i+1:

],1)

+ self.counteval(s[

:i],0)

*self.counteval(s[i+1:

],1)

+ self.counteval(s[

:i],1)

*self.counteval(s[i+1:

],0)

elif symbol == self.xor:

# 1^0 + 0^1

res += self.counteval(s[

:i],1)

*self.counteval(s[i+1:

],0)

+ self.counteval(s[

:i],0)

*self.counteval(s[i+1:

],1)

return

int(res)

python布林系列 python 布林運算

python學習手冊 讀書筆記 真值測試 在python中 任何非零數字或非空物件都為真 數字零 空物件以及特殊物件none都被認作是假 比較和相等測試會遞迴地應用在資料結構中 比較和相等測試會返回true或false 1和0的特殊版本 布林and和or運算子會返回真或假的操作物件 python中有...

布林運算製做火箭

首先把要製作的火箭看一下 如圖 首先畫兩個橢圓,然後把它們交集獲得乙個這樣的圖形有一點像火箭的身體了 再然後又畫兩個橢圓還是跟剛剛一樣的但是不是交集了,畫出來以後,把乙個橢圓放到另乙個橢圓的上面,然後來乙個減去頂層形狀就行了.又畫乙個橢圓,把橢圓放到有點像火箭的下面,但是橢圓的圖層一定要到火箭圖層的...

布林運算子

a,b 1,2 有乙個為假即為假 print a 1 and b 2 true and true true print a 1 and b 2 true and false false 有乙個為真即為真 print a 1 or b 2 true or true true print a 1 or ...