回溯 A018 LC 24 點遊戲(next

2021-10-08 19:47:42 字數 1469 閱讀 5894

你有 4 張寫有 1 到 9 數字的牌。你需要判斷是否能通過 *,/,+,-,(,) 的運算得到 24。

示例 1:

輸入: [4, 1, 8, 7]

輸出: true

解釋: (8-4) * (7-1) = 24

示例 2:

輸入: [1, 2, 1, 2]

輸出: false

注意:

方法一:next_permutation

思路

窮舉每一種排列,對每一種進行運算,想一下四個數的陣列 a 運算有幾種可能(下面用 @ 表示運算子):

class

solution;if

(a) ans.

insert

(b/a);if

(b) ans.

insert

(a/b)

;return ans;

}bool

judgepoint24

(vector<

int>

& a)

for(

auto o : ab)

for(

auto p :

get_ans

(o, a[2]

))for(

auto q :

get_ans

(p, a[3]

))if(

abs(q-24)

return

true;}

while

(next_permutation

(a.begin()

, a.

end())

);return

false;}

};

複雜度分析

方法二:回溯

基於方法一的思想與參照別人的回溯解法,也可以通過回溯選數來代替全排列

每次只選兩個數,然後運算結果作為新元素重新插到陣列中,進行回溯…

class

solution;if

(a) ans.

insert

(b/a);if

(b) ans.

insert

(a/b)

;return ans;

}bool

dfs(vector<

double

>

& a)

for(

double v :

op(a[i]

, a[j]))

}return

false;}

bool

judgepoint24

(vector<

int>

& a)

};

複雜度分析

線性 dp B018 LC 恢復空格(分類討論)

哦,不!你不小心把乙個長篇文章中的空格 標點都刪掉了,並且大寫也弄成了小寫。像句子 i reset the computer.it still didn t boot 已經變成了 iresetthecomputeritstilldidntboot 在處理標點符號和大小寫之前,你得先把它斷成詞語。當然...

lc93 復原IP位址 回溯法

原題鏈結 我的回溯函式返回的是分段方法,是一組四元向量。如 3,3,2,3 表示ip位址的點分十進位制的4個數分別是3位數,3位數,2位數,3位數。主函式中再將其對應到具體的ip位址 class solution return ans void ipaddresses string s,int n ...

快算24 回溯

成績 10開啟時間 2020年04月7日 星期二 08 55 折扣0.8 折扣時間 2020年05月1日 星期五 23 55 允許遲交 否關閉時間 2020年05月1日 星期五 23 55 一副牌,除了大小王之外還有52張,從1到13每個數目各有四張。要求設計乙個程式,對於任意給出52張牌中的四張,...