zoukankan      html  css  js  c++  java
  • Leetcode949. Largest Time for Given Digits给定数字能组成最大的时间

    给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间。

    最小的 24 小时制时间是 00:00,而最大的是 23:59。从 00:00 (午夜)开始算起,过得越久,时间越大。

    以长度为 5 的字符串返回答案。如果不能确定有效时间,则返回空字符串。

    示例 1:

    输入:[1,2,3,4] 输出:"23:41"

    示例 2:

    输入:[5,5,5,5] 输出:""

    提示:

    1. A.length == 4
    2. 0 <= A[i] <= 9

    题目有很多格式没有说明清楚的地方。

    类似DFS的循环做法。遍历,注意好判断条件

    最初无修改,击败14%

    bool cmp(int x, int y)
    {
    	return x > y;
    }
    
    class Solution {
    public:
    	string largestTimeFromDigits(vector<int>& A) 
    	{
    		sort(A.begin(), A.end(), cmp);
    		bool visit[4];
    		memset(visit, 0, sizeof(visit));
    		int MIN = 0;
    		int MAX = 1439;
    		int res = 0;
    		int flag = false;
    		for (int i = 0; i < 4; i++)
    		{
    			visit[i] = true;
    			for (int j = 0; j < 4; j++)
    			{
    				if (visit[j] == true)
    					continue;
    				visit[j] = true;
    				for (int k = 0; k < 4; k++)
    				{
    					if (visit[k] == true)
    						continue;
    					visit[k] = true;
    					for (int l = 0; l < 4; l++)
    					{
    						if (visit[l] == true)
    							continue;
    //注意
    						if(A[i] > 2 || A[k] > 5)
    							continue;
    						int temp = (A[i] * 10 + A[j]) * 60 + (A[k] * 10 + A[l]);
    						if (temp < MIN || temp > MAX)
    							continue;
    						flag = true;
    						res = max(res, temp);
    					}
    					visit[k] = false;
    				}
    				visit[j] = false;
    			}
    			visit[i] = false;
    		}
    		if (!flag)
    			return "";
    		if (res == 0)
    			return "00:00";
    		string str = "";
    		if (res / 60 < 10)
    		{
    			str += "0" + to_string(res / 60) + ":";
    		}
    		else
    		{
    			str += to_string(res / 60) + ":";
    		}
    
    		if (res % 60 < 10)
    		{
    			str = str + "0" + to_string(res % 60);
    		}
    		else
    		{
    			str += to_string(res % 60);
    		}
    		return str;
    	}
    };

    因为从大到小排过序,所以第一次能够组成的一定是最大的。

    修改一下,击败100%

    bool cmp(int x, int y)
    {
    	return x > y;
    }
    
    class Solution {
    public:
    	string largestTimeFromDigits(vector<int>& A) 
    	{
    		sort(A.begin(), A.end(), cmp);
    		bool visit[4];
    		memset(visit, 0, sizeof(visit));
    		int MIN = 0;
    		int MAX = 1439;
    		int res = 0;
    		for (int i = 0; i < 4; i++)
    		{
    			visit[i] = true;
    			for (int j = 0; j < 4; j++)
    			{
    				if (visit[j] == true)
    					continue;
    				visit[j] = true;
    				for (int k = 0; k < 4; k++)
    				{
    					if (visit[k] == true)
    						continue;
    					visit[k] = true;
    					for (int l = 0; l < 4; l++)
    					{
    						if (visit[l] == true)
    							continue;
    //注意
    						if(A[i] > 2 || A[k] > 5)
    							continue;
    						int temp = (A[i] * 10 + A[j]) * 60 + (A[k] * 10 + A[l]);
    						if (temp < MIN || temp > MAX)
    							continue;
    						res = max(res, temp);
    						if (res == 0)
    							return "00:00";
    						string str = "";
    						if (res / 60 < 10)
    						{
    							str += "0" + to_string(res / 60) + ":";
    						}
    						else
    						{
    							str += to_string(res / 60) + ":";
    						}
    
    						if (res % 60 < 10)
    						{
    							str = str + "0" + to_string(res % 60);
    						}
    						else
    						{
    							str += to_string(res % 60);
    						}
    						return str;
    					}
    					visit[k] = false;
    				}
    				visit[j] = false;
    			}
    			visit[i] = false;
    		}
    		return "";
    	}
    };
  • 相关阅读:
    read、readline、readlines和linecache的使用
    无法启用internet连接共享,为LAN连接配置的IP地址需要使用自动IP寻址
    虚拟机pycharm
    Ubuntu安装谷歌浏览器
    pandas dataframe重复数据查看.判断.去重
    git 删除误上传的.idea文件
    python logger日志通用配置文件
    pyinstaller打包python文件成exe(原理.安装.问题)
    SSH 免密登录服务器
    homebrew安装和解决brew安装速度慢的问题
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10433786.html
Copyright © 2011-2022 走看看