leetcode-473. 火柴拼正方形
題目
還記得童話《賣火柴的小女孩》嗎?現在,你知道小女孩有多少根火柴,請找出一種能使用所有火柴拼成一個正方形的方法。不能折斷火柴,可以把火柴連線起來,並且每根火柴都要用到。
輸入為小女孩擁有火柴的數目,每根火柴用其長度表示。輸出即為是否能用所有的火柴拼成正方形。
示例 1:
輸入: [1,1,2,2,2]
輸出: true
解釋: 能拼成一個邊長為2的正方形,每邊兩根火柴。
示例 2:
輸入: [3,3,3,3,4]
輸出: false
解釋: 不能用所有火柴拼成一個正方形。
注意:
給定的火柴長度和在 0 到 10^9之間。
火柴陣列的長度不超過15。
解題思路
和劃分為k個相等的子集思路完全一樣,是k = 4
的特例
狀態壓縮dp的思路和這個完全一樣的,只不過是在visited_indexs
的地方用bit來表示了。
程式碼
class Solution:
def makesquare(self, nums: List[int]) -> bool:
if (not nums) or sum(nums) % 4 or max(nums) > sum(nums) // 4:
return False
visited_indexs = [False] * len(nums)
target = sum(nums) // 4
def helper(nums: list, edge_cnt: int, begin_index: int, cur_sum: int) -> bool:
if edge_cnt == 4:
return True
if cur_sum > target:
return False
if cur_sum == target:
return helper(nums, edge_cnt + 1, 0, 0)
for index in range(begin_index, len(nums)):
if visited_indexs[index]:
continue
visited_indexs[index] = True
if helper(nums, edge_cnt, index + 1, cur_sum + nums[index]):
return True
visited_indexs[index] = False
return False
return helper(nums, 0, 0, 0)
相關文章
- BZOJ2828 : 火柴遊戲遊戲
- 火柴人正版授權動作手遊《火柴人歸來》今日首測!
- 【DP】最大正方形
- 《火柴人覺醒》今日全平臺公測,放置卡牌拯救火柴人!
- css實現最大正方形CSS
- LintCode 最大正方形
- 正方形計數 題解
- “火柴棍式”程式設計師面試題程式設計師面試題
- 單獨補題-數正方形
- NOIP2013火柴排隊[逆序對]
- 正方形矩陣旋轉90度矩陣
- 拼高薪、拼福利、拼補貼,上海遊戲大廠成熱門求職聖地?高薪遊戲求職
- 純 CSS 實現自適應正方形CSS
- 拼JSONJSON
- Python實現火柴人的設計與實現Python
- 歡樂拼購商城系統開發,Viiva購歡樂拼購拼團模式介紹模式
- 如何自己做小程式拼團,實體店怎麼做拼團【拼團連結生成工具】
- 【洛谷OJ】【JAVA】P1149 火柴棒等式Java
- 七人拼團系統開發即拼商城模式模式
- AIX 程式設計大賽---AIX正方形問題AI程式設計
- 全民拼購模式玩法模式
- vue拼圖動畫DemoVue動畫
- 雙拼入門教程
- 微信收藏拼長圖發朋友圈教程 微信怎麼拼圖?
- 樂視影片《女總裁的貼身高手》拼顏值更拼實力
- Bitmap擷取中間正方形並取出圓形圖片
- webstorm(二):拼寫warningWebORM
- canvas拼圖功能實現Canvas
- FigrCollage 照片拼貼工具
- 微信小程式:拼圖遊戲微信小程式遊戲
- 數倉+admin拼團
- 東拼西湊學javaJava
- TurboCollage 照片拼貼軟體
- web拼圖錯誤分析Web
- 當VR和工業應用碰撞,火柴全景VR用科技變革生活VR
- [LeetCode 中等 動態規劃 ]221. 最大正方形LeetCode動態規劃
- HTML5畫布canvas隨機生成圓形和正方形HTMLCanvas隨機
- 程式設計師35歲後,不拼體力了還不能拼什麼?程式設計師