LeetCode949-给定数字能组成的最大时间
问题:
给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间。
最小的 24 小时制时间是 00:00,而最大的是 23:59。从 00:00 (午夜)开始算起,过得越久,时间越大。
以长度为 5 的字符串返回答案。如果不能确定有效时间,则返回空字符串。
示例 1:
输入:[1,2,3,4]
输出:"23:41"
示例 2:
输入:[5,5,5,5]
输出:""
提示:
A.length == 40 <= A[i] <= 9
链接:https://leetcode-cn.com/contest/weekly-contest-113/problems/largest-time-for-given-digits/
分析:
1.将数字转换为字符串,然后进行全排列
2.从大到小,踢出不合规的,得到的第一个即为最大时间
3.合理时间小时不得大于23,分钟不得大于59
AC Code:
class Solution {
public:
string largestTimeFromDigits(vector<int>& A) {
string ret = "";
vector<string> all;
string str;
sort(A.begin(), A.end());
for (int i = ; i < A.size(); i++)
{
str += (char)(A[i] + '');
}
all = GetAll(str);
sort(all.begin(), all.end());
//all.erase(unique(all.begin(), all.end()), all.end());
for (int i = all.size()-; i >= ; i--)
{
ret = getValidTime(all[i]);
if (ret != "")
{
return ret;
}
}
return ret;
}
string getValidTime(string str)
{
string ret = "";
string hour = "";
hour+= (char)str[];
hour+=(char)str[];
string minute = "";
minute += (char)str[];
minute += (char)str[];
if (hour>"")
{
return ret;
}
if (minute > "")
{
return ret;
}
return hour + ":" + minute;
return ret;
}
vector<string> GetAll(string str)
{
vector<string> ret;
ret.emplace_back(str);
while (next_permutation(str.begin(), str.end()))
{
ret.emplace_back(str);
}
return ret;
}
};
其他:
1.next_permutation 可以获得字符串的下一个全排列,所有需要先排序得到最小的一个,然后继续得到下一个
2.过程中试图逐个判断数字,比如看有没有2,如果有的话看剩下的里面有没有0-3这种方式,浪费一个多小时,涉及到回溯等,不过过程中也暴露出一些掌握的不扎实的基础知识点
2.1 查看vector X中是否有元素x: X.count(X.begin(),X.end(),x),统计该元素的个数,如果0则表示不存在
2.2 删除指定位置的元素:X.erase(X.begin()+index)
3,最开始的直接想法是尝试,过程中发现全排列更好,不过都已经花费了很长时间了,想着实现了再说,结果陷到坑里出不来了,第一个简单题解决用了一个小时,改用全排列后也不过十来分钟。这就是所谓的沉没成本吗?需要尽量克服这种心理。
4.第一code:
class Solution {
public:
string largestTimeFromDigits(vector<int>& A) {
sort(A.begin(), A.end());
string answer = "";
for (int t = ; t < ; t++) {
if (t % >= )
continue;
vector<int> digits;
int t_copy = t;
for (int i = ; i < ; i++) {
digits.push_back(t_copy % );
t_copy /= ;
}
sort(digits.begin(), digits.end());
if (A == digits) {
char str[];
sprintf(str, "%02d:%02d", t / , t % );
answer = str;
}
}
return answer;
}
};
LeetCode949-给定数字能组成的最大时间的更多相关文章
- [Swift]LeetCode949. 给定数字能组成的最大时间 | Largest Time for Given Digits
Given an array of 4 digits, return the largest 24 hour time that can be made. The smallest 24 hour t ...
- Leetcode 949. 给定数字能组成的最大时间
949. 给定数字能组成的最大时间 显示英文描述 我的提交返回竞赛 用户通过次数125 用户尝试次数213 通过次数127 提交次数774 题目难度Easy 给定一个由 4 位数字组成的数组,返 ...
- Leetcode949. Largest Time for Given Digits给定数字能组成最大的时间
给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间. 最小的 24 小时制时间是 00:00,而最大的是 23:59.从 00:00 (午夜)开始算起,过得越久,时间越大. ...
- mysql学习1:数据类型:数字型,日期和时间,字符串类型(总结)
mysql数据类型:数字型,日期和时间,字符串类型 摘要 MySQL中定义数据字段的类型对数据库的优化是非常重要的: MySQL支持多种类型,大致可以分为三类,如下. 数字类型 整数:tinyint. ...
- LeetCode 34 Search for a Range (有序数组中查找给定数字的起止下标)
题目链接: https://leetcode.com/problems/search-for-a-range/?tab=Description Problem: 在已知递减排序的数组中,查找到给定 ...
- linux time-统计给定命令所花费的总时间
推荐:更多linux 性能监测与优化 关注:linux命令大全 time命令用于统计给定命令所花费的总时间. 语法 time(参数) 参数 指令:指定需要运行的额指令及其参数. 实例 当测试一个程序或 ...
- Mysql数据库里面的String类型依照数字来排序以及按时间排序的sql语句
今天做项目的时候,遇到个小小的问题,在数据库中查询的时候,要用String类型的ID进行一下排序!(注:ID字段为 varchar 类型) 解决的方法: 如: SELECT * FROM Stude ...
- April Fools Contest 2017 题解&源码(A,数学 B,数学 C,数学 D,字符串 E,数字逻辑 F,排序,卡时间,G,数学)
A. Numbers Joke time limit per test:2 seconds memory limit per test:64 megabytes input:standard inpu ...
- 利用linq快速判断给定数字是否包含在某个段范围内
一.需求: 知道某段范围0x0020~0x007F0x00A0~0x017F0x01A0~0x01CF0x01F0~0x01FF0x0210~0x021F0x1EA0~0x1EFF给定一个值,快速判断 ...
随机推荐
- python入门之os模块
import os os.getcwd() 同Linux的pwd os.chdir("/opt") 同Linux的cd os.curdir 返回当前目录 os.pardir 获取上 ...
- vi 编辑器的复制
v 进入可视化模式,y 复制选中区域,p粘贴 Ctrl + v 块模式 yy 复制当前行
- 【hihocoder】1237 : Farthest Point 微软2016校招在线笔试题
题目:给定一个圆,要你求出一个在里面或者在边上的整数点,使得这个点到原点的距离最大,如果有多个相同,输出x最大,再输出y最大. 思路:对于一个圆,里面整点个数的x是能确定的.你找到x的上下界就可以了. ...
- Unity Time.timeScale
原创网址: http://www.xuanyusong.com/archives/2956 项目里面一直在用Time.timeScale来做游戏的 1倍 2倍整体加速,今天我仔细看了一下Time.ti ...
- Python 2.x和3.x不同点
1.print和print() 2.yield 出现下面的错误Traceback (most recent call last): File “<pyshell#32>”, line 1, ...
- 利用Java程序将字符串进行排序与拼接
1.初始生成字符串的代码程序: package com.map.test; import java.util.ArrayList; import java.util.Collections; impo ...
- 映射部署tomcat
近期遇到问题总结[映射部署]2017年10月03日 10:16:54 守望dfdfdf 阅读数:108更多个人分类: Java知识编辑版权声明:本文为博主原创文章,转载请注明文章链接. https:/ ...
- spring运用的设计模式
1.代理模式(典型的aop) 2.工厂模式(beanFactory) 3.观察者模式(ApplicationContextEvent && ApplicationContextList ...
- 学习笔记:location.hash和history.pushState()
在浏览器中改变地址栏url,将会触发页面资源的重新加载,这使得我们可以在不同的页面间进行跳转,得以浏览不同的内容.但随着单页应用的增多,越来越多的网站采用ajax来加载资源.因为异步加载的特性,地址栏 ...
- #include stdio.h(1)
#include <stdio.h> int main() { //************一.运算符********** //1.赋值运算符 = ; //赋值运算符表示的是将等号右边的赋 ...