栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode 374 火柴拼正方形[回溯] HERODING的LeetCode之路

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 374 火柴拼正方形[回溯] HERODING的LeetCode之路


解题思路:
首先火柴的总长度得满足4的倍数,否则根本不能构成正方形,接着对每个火柴进行dfs,让其在每条边都试一次,并回溯,如果所有的火柴都遍历并满足构成正方形的条件,返回true,否则返回false,代码如下:

class Solution {
public:
    bool makesquare(vector& matchsticks) {
        int count = accumulate(matchsticks.begin(), matchsticks.end(), 0);
        if(count % 4 != 0) {
            return false;
        }
        sort(matchsticks.begin(), matchsticks.end(), greater());
        vector edges(4);
        return dfs(0, matchsticks, edges, count / 4);
    }

    bool dfs(int index, vector& matchsticks, vector& edges, int num) {
        if(index == matchsticks.size()) {
            return true;
        }
        for(int i = 0; i < 4; i ++) {
            edges[i] += matchsticks[index];
            if(edges[i] <= num && dfs(index + 1, matchsticks, edges, num)) {
                return true;
            } 
            edges[i] -= matchsticks[index];
        }
        return false;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948469.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号