使用Python重新使用相同的数字来查找最近时间的程序
假设我们有一个“hh:mm”格式的24小时字符串,我们必须找到下一个最接近的时间,该时间可以通过重新使用给定数字来形成。我们可以任意多次重复使用给定字符串中的数字。
因此,如果输入为s =“03:15”,则输出将为03:30,即最接近重复给定数字的时间为03:30。
要解决这个问题,我们将遵循以下步骤:
- 使用:=具有两位数字的小时和两位数字的分钟值的列表
- 可能:=一个新集合
- 定义一个函数backtrack()。这将采用路径
- 如果路径的大小与4相同,则
- (路径[前两位数字]连接“:”连接路径[后两位数字])并将其插入possible。
- 返回
- 对于使用中的每个p,执行以下操作:
- 如果(路径大小与0相同且p>“2”)为假且(路径与“2”相同且p>“3”)为假且(路径大小与2相同且p>“5”)为假,则
- backtrack(path + p)
- 如果(路径大小与0相同且p>“2”)为假且(路径与“2”相同且p>“3”)为假且(路径大小与2相同且p>“5”)为假,则
- 从主要方法执行以下操作:
- backtrack(空字符串)
- 可能:=从possible的新列表
- 对可能的列表进行排序
- 对于范围为0到可能大小-2的i,执行以下操作:
- 如果possible[i]与s相同,则
- 返回possible[i + 1]
- 如果possible[i]与s相同,则
- 返回possible[0]
让我们看一下以下实现,以获得更好的理解:
例子
class Solution:
def solve(self, s):
use = [s[0], s[1], s[3], s[4]]
possible = set()
def backtrack(path):
nonlocal possible, use
if len(path) == 4:
possible.add(path[:2] + ":" + path[2:])
return
for p in use:
if (not (len(path) == 0 and p > "2") and not (path == "2" and p > "3") and not (len(path) == 2 and p > "5")):
backtrack(path + p)
backtrack("")
possible = list(possible)
possible.sort()
for i in range(len(possible) - 1):
if possible[i] == s:
return possible[i + 1]
return possible[0]
ob = Solution()
s = "03:15"
print(ob.solve(s))
输入
"03:15"
输出
03:30