日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 473. 火柴拼正方形(回溯)

發(fā)布時(shí)間:2024/7/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 473. 火柴拼正方形(回溯) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

還記得童話《賣火柴的小女孩》嗎?現(xiàn)在,你知道小女孩有多少根火柴,請(qǐng)找出一種能使用所有火柴拼成一個(gè)正方形的方法。

不能折斷火柴,可以把火柴連接起來(lái),并且每根火柴都要用到

輸入為小女孩擁有火柴的數(shù)目,每根火柴用其長(zhǎng)度表示。輸出即為是否能用所有的火柴拼成正方形。

示例 1: 輸入: [1,1,2,2,2] 輸出: true 解釋: 能拼成一個(gè)邊長(zhǎng)為2的正方形,每邊兩根火柴。示例 2: 輸入: [3,3,3,3,4] 輸出: false解釋: 不能用所有火柴拼成一個(gè)正方形。 注意: 給定的火柴長(zhǎng)度和在 010^9之間。 火柴數(shù)組的長(zhǎng)度不超過(guò)15

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/matchsticks-to-square
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2. 解題

  • 注意先從大到小排序,不排序會(huì)超時(shí),優(yōu)先拿大的,省掉很多無(wú)效的操作
class Solution {bool found = false;int s1_4;vector<int> parts; public:bool makesquare(vector<int>& nums) {sort(nums.rbegin(), nums.rend());int sum = accumulate(nums.begin(), nums.end(), 0);s1_4 = sum/4;parts = vector<int> (4,0);if(sum%4 || nums.size() < 4 || nums[0] > s1_4) return false;if(nums[0] < s1_4 && nums[0]+nums.back() > s1_4)//都小于1/4,且最大+最小 > 1/4 return false;bt(nums, 0);return found;}void bt(vector<int>& nums, int idx){if(found) return;if(parts[0] > s1_4 || parts[1] > s1_4|| parts[2] > s1_4 || parts[3] > s1_4)return;if(idx==nums.size() && parts[0]==parts[1] && parts[0]==parts[2] && parts[0]==parts[3]){found = true;return;}for(int i = 0; i < 4; ++i){parts[i] += nums[idx];bt(nums, idx+1);parts[i] -= nums[idx];}} };

204 ms 9.9 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!

總結(jié)

以上是生活随笔為你收集整理的LeetCode 473. 火柴拼正方形(回溯)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。