你有 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張牌中的四張,...