zoukankan      html  css  js  c++  java
  • 火柴拼正方形

    还记得童话《卖火柴的小女孩》吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法。不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到。

    输入为小女孩拥有火柴的数目,每根火柴用其长度表示。输出即为是否能用所有的火柴拼成正方形。

    示例 1:

    输入: [1,1,2,2,2]
    输出: true

    解释: 能拼成一个边长为2的正方形,每边两根火柴。
    示例 2:

    输入: [3,3,3,3,4]
    输出: false

    解释: 不能用所有火柴拼成一个正方形。
    注意:

    给定的火柴长度和在 0 到 10^9之间。
    火柴数组的长度不超过15。

    code:

    class Solution {
    private:
        bool dfs(const vector<int>& nums,int start,int end,int e1,int e2,int e3,int e4)
        {
            if(e1<0||e2<0||e3<0||e4<0)
                return false;
            if(start==end+1)
            {
                if(e1==0&&e2==0&&e3==0&&e4==0)
                    return true;
                return false;
            }
            return dfs(nums,start+1,end,e1-nums[start],e2,e3,e4)||
                   dfs(nums,start+1,end,e1,e2-nums[start],e3,e4)||
                   dfs(nums,start+1,end,e1,e2,e3-nums[start],e4)||
                   dfs(nums,start+1,end,e1,e2,e3,e4-nums[start]);
        }
    public:
        bool makesquare(vector<int>& nums) {
            if(nums.size()<4)
                return false;
    
            int numSum=accumulate(nums.begin(),nums.end(),0);
            int edgLen=numSum/4;
            if(edgLen*4!=numSum)
                return false;
            
            sort(nums.begin(),nums.end(),greater<int>());
            return dfs(nums,0,nums.size()-1,edgLen,edgLen,edgLen,edgLen);
        }
    };
  • 相关阅读:
    Ansible-Tower--安装配置及破解
    Ansible-playbook--配置及使用
    Ansible-基础配置及常用模块
    基于SLB实现滚动发布
    CentOS7 部署yapi API 文档管理工具
    node及pm2环境安装
    MySQL参数max_connect_errors分析
    CentOS7搭建confluence企业级文档管理
    Gitlab用户密码忘记如何修改
    Docker私有仓库Harbor介绍与部署
  • 原文地址:https://www.cnblogs.com/tianzeng/p/12667608.html
Copyright © 2011-2022 走看看