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给定一个值,快速判断 ...
随机推荐
- maven插件: shade, assembly
shade插件的作用: 通过版本的exclution无法解决jar冲突的问题, 解决方案是把依赖的包打到本model的jar中,打包的时候由mvn plugin自动修改代码中的依赖jar包名 relo ...
- 练习四十六:列表排序,删除list中重复的元素
方法一:使用集合set;将list直接转换为set a = [1,3,4,3,5,7] a = list(set(a)) print(a) 执行结果: [1, 3, 4, 5, 7] 方法二:直接排序 ...
- 使用scrapy+selenium爬取淘宝网
--***2019-3-27测试有效***---- 第一步: 打开cmd,输入scrapy startproject taobao_s新建一个项目. 接着cd 进入我们的项目文件夹内输入scrapy ...
- Java面向对象_简单工厂模式
概念:由一个工厂对象决定创建出哪一种产品类的实例. public class Practice14 { public static void main(String[] args) { // TODO ...
- C# 多线程之线程池
线程池System.Threading.ThreadPool,可用于发送工作项.处理异步I/O.代表其它线程等待以及处理计时器.基本用法: public void Main() { ThreadPoo ...
- 日常bug整理--xxtz
2017-12-12 建SQLite数据库表时,遇到外键关联报错:foreign key mismatch 解决:发现是个粗心问题,关联的外键没有作为主键,原因是关联的外键由INT改为varchar字 ...
- java 基础 03 运算符 分支结构 循环结构
今天内容: (1)运算符 (2)分支结构 (3)循环结构 1运算符 1.1赋值运算符 (1)简单赋值 = 表示赋值运算符,用于将=右边的数据赋值给=左边的变量来覆盖原来的数值. 笔试题: ia == ...
- ABAP ICON
1.输出图标的3种方法 WRITE: / '@09@'. "id WRITE: / icon_yellow_light. "name WRITE: / '@S_TL_Y@'. &q ...
- 将vim配置成一个轻量的IDE开发工具
1.插件管理工具 2.安装插件 3.配置.vimrc 1.插件管理工具 vim的插件有很多,为了后面方便添加新的插件,我们需要一个插件管理工具来帮我们管理安装的插件,这里使用的是vim-pathoge ...
- 1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间; 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和; 3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时
1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间: 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时 ...