回溯方法解決每個人戴不同的帽子

2021-10-07 03:58:00 字數 1263 閱讀 5431

總共有 n 個人和 40 種不同的帽子,帽子編號從 1 到 40 。

給你乙個整數列表的列表 hats ,其中 hats[i] 是第 i 個人所有喜歡帽子的列表。

請你給每個人安排一頂他喜歡的帽子,確保每個人戴的帽子跟別人都不一樣,並返回方案數。

由於答案可能很大,請返回它對 10^9 + 7 取餘後的結果。

示例 1:

輸入:hats = [[3,4],[4,5],[5]]

輸出:1

解釋:給定條件下只有一種方法選擇帽子。

第乙個人選擇帽子 3,第二個人選擇帽子 4,最後乙個人選擇帽子 5。

示例 2:

輸入:hats = [[3,5,1],[3,5]]

輸出:4

解釋:總共有 4 種安排帽子的方法:

(3,5),(5,3),(1,3) 和 (1,5)

示例 3:

輸入:hats = [[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]

輸出:24

解釋:每個人都可以從編號為 1 到 4 的帽子中選。

(1,2,3,4) 4 個帽子的排列方案數為 24 。

示例 4:

輸入:hats = [[1,2,3],[2,3,5,6],[1,3,7,9],[1,8,9],[2,5,7]]

輸出:111

n == hats.length

1 <= n <= 10

1 <= hats[i].length <= 40

1 <= hats[i][j] <= 40

hats[i] 包含乙個數字互不相同的整數列表。

class

solution

// 已經被使用了的帽子。不能再給接下來的人用

set<

int> used;

// [0, i) 這些人都已經有了帽子。返回值是給接下來的人選帽子的方案數。

intdfs

(int i)

int cnt =0;

// 給第 i 個人選一頂帽子,不能選已經被用了的帽子。

for(

int hat : hats[i])}

return cnt;}}

;//leetcode-cn.com/problems/number-of-ways-to-wear-different-hats-to-each-other/solution/zhuang-tai-ya-suo-dp-ru-men-by-qodjf/

這樣會超時,但是思想要學習

每個人心中

我們這個單位,因為行業的關係,職工幾乎全是男的,全部的女職工加起來不過10個左右。以前我們部門有個年輕男同事在的時候老為這發愁,說單位就像和尚廟,找個物件都難,所以後來他辭職走了,哈哈,當然,並不是為這個原因辭職的。中午,在食堂吃飯。同事拉拉我胳膊,快看。我看向她示意的方向,乙個姑娘坐在一張餐桌旁吃...

每個人都是周星馳

記得幾年前有一首網路歌曲 就算我是周星馳 寫得不算差,卻沒有火起來。想想借周星馳之名的人很多,說明 還是有很多人認可周星馳的。今天在卓越上閒逛居然看到了潘愛民領銜的一本新書叫做 程式設計師的自我修養 看到書名我就笑了出來 看過 喜劇之王 的朋友是否還記得尹天仇看的那本 演員的自我修養 潘老師的這本書...

主動久了,每個人都會累

如果有乙個女生或男生,放下自己的身段,主動聯絡你。給你打 給你發簡訊。一次,兩次,三次 如果有乙個女生或男生,放下所謂的尊嚴,有事沒事都聯絡你。總想知道你在幹什麼,一天,兩天,三天 或者好久,你覺得她他很廉價,或許,你根本不在乎。甚至,你以為一切都是理所當然的。你以為自己是高傲的,別人聯絡你是應該的...