python3__leecode/1736.替换隐藏数字得到的最晚时间

本文介绍了如何解决LeetCode上的一个问题——替换隐藏数字得到的最晚时间。通过贪心策略,从高位到低位,确保每个位置在合法范围内取最大值,从而得到最晚的有效时间。例如,对于输入'2?:?0',输出为'23:50'。解题方法包括直接根据时间规则设置每位最大值,如将'?'替换为对应位置的最大可能数字。
部署运行你感兴趣的模型镜像

1736. latest time by replacing hidden digits替换隐藏数字得到的最晚时间

一、刷题内容

原题链接

https://leetcode-cn.com/problems/latest-time-by-replacing-hidden-digits/

内容描述

给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。

有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23:59 。

替换 time 中隐藏的数字,返回你可以得到的最晚有效时间。

示例 1:
输入:time = “2?:?0”
输出:“23:50”
解释:以数字 ‘2’ 开头的最晚一小时是 23 ,以 ‘0’ 结尾的最晚一分钟是 50 。

示例 2:
输入:time = “0?:3?”
输出:“09:39”

示例 3:
输入:time = “1?:22”
输出:“19:22”

提示:
time 的格式为 hh:mm
题目数据保证你可以由输入的字符串生成有效的时间

二、解题方法

1.方法一:贪心

为了得到最晚有效时间,我们可以从高位向低位枚举,在保证时间有效的情况下,使得每一位尽可能取最大值。

因为本题中时间的位数较少,我们依次考虑每一位的规则即可。
第一位:若第二位的值已经确定,且值落在区间 [4,9][4,9] 中时,第一位的值最大只能为 11,否则最大可以为 22;
第二位:若第一位的值已经确定,且值为 22 时,第二位的值最大为 33,否则为 99;
第三位:第三位的值的选取与其它位无关,最大为 55;
第四位:第四位的值的选取与其它位无关,最大为 99。

class Solution:
    def maximumTime(self, time: str) -> str:
        time = list(time)
        for i in range(len(time)):
            if i==0 and time[i]=='?':
                if time[i+1] == '?' or int(time[i+1])<=3:
                    time[i] = '2'
                else:
                    time[i] = '1'
            if i==1 and time[i]=='?':
                if time[i-1]=='0' or time[i-1]=='1':
                    time[i] = '9'
                else:
                    time[i] = '3'
            if i==3 and time[i]=='?':
                time[i] = '5'
            if i==4 and time[i]=='?':
                time[i] = '9'
        return ''.join(time)

2.方法二

class Solution:
    def maximumTime(self, time: str) -> str:
        time = list(time)
        if time[0] == '?':
            time[0] = '2' if time[1] in ('0','1','2','3','?') else '1'
        if time[1] == '?':
            time[1] = '9' if time[0] in ('0','1') else '3'
        if time[3] == '?': time[3] = '5'
        if time[4] == '?': time[4] = '9'
        return "".join(time)

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 解决方案 CMake 找不到 Python3 库和头文件的问题通常可以通过设置 `Python3_ROOT_DIR` 或者手动指定库和头文件的位置来解决。以下是详细的解决方案: #### 方法一:通过 `find_package` 自动查找 如果系统中有多个版本的 Python 安装,可能需要显式指定 Python 的根目录以便 CMake 正确找到所需的库和头文件。 ```cmake set(Python3_ROOT_DIR "/path/to/python/root") # 替换为实际路径 find_package(Python3 COMPONENTS Interpreter Development REQUIRED) if(NOT Python3_FOUND) message(FATAL_ERROR "Python3 not found!") endif() message(STATUS "Python3 Include Directories: ${Python3_INCLUDE_DIRS}") message(STATUS "Python3 Libraries: ${Python3_LIBRARIES}") add_executable(cpp-python-test main.cpp) target_include_directories(cpp-python-test PRIVATE ${Python3_INCLUDE_DIRS}) target_link_libraries(cpp-python-test PRIVATE ${Python3_LIBRARIES}) ``` 这种方法依赖于系统的包管理器或者环境变量配置是否正确[^1]。 --- #### 方法二:手动指定 Python 路径 当自动检测失败时,可以手动指定 Python 的头文件和库位置。这种方式适用于自定义安装的 Python 版本或虚拟环境中的 Python。 ```cmake set(PYTHON3_INCLUDE_DIR "/path/to/python/include/dir") # 替换为实际路径 set(PYTHON3_LIBRARY "/path/to/python/library/file.so") # 替换为实际路径 add_executable(cpp-python-test main.cpp) target_include_directories(cpp-python-test PRIVATE ${PYTHON3_INCLUDE_DIR}) target_link_libraries(cpp-python-test PRIVATE ${PYTHON3_LIBRARY}) ``` 此方法可以直接绕过 `find_package` 的复杂逻辑,适合调试阶段使用[^2]。 --- #### 方法三:针对 ROS 工程的特殊处理 对于基于 ROS 的项目,建议在编译时通过 `-D` 参数传递 Python 的具体路径给 CMake。这通常是由于 ROS 默认使用的 Python 版本与系统默认版本不一致引起的。 ```bash catkin_make \ -DPYTHON_EXECUTABLE="/path/to/python/executable" \ -DPYTHON_INCLUDE_DIR="/path/to/python/include/dir" \ -DPYTHON_LIBRARY="/path/to/python/library/file.so" ``` 这种做法特别适用于使用 Conda 环境或其他隔离环境的情况[^3]。 --- #### 方法四:解决 Boost.Python 和 pybind11 的兼容性问题 如果项目还涉及 Boost.Python 或 pybind11,则需要注意它们对 Python 后缀的要求。例如,在 Boost 1.67 及更高版本中,组件名称需带有具体的 Python 版本号(如 `python36` 或 `python27`)。 ```cmake find_package(Boost COMPONENTS python39 REQUIRED) # 假设使用 Python 3.9 include_directories(${Boost_INCLUDE_DIRS}) add_executable(boost-python-example main.cpp) target_link_libraries(boost-python-example PRIVATE ${Boost_LIBRARIES} ${Python3_LIBRARIES}) ``` 此外,推荐优先考虑更现代的绑定工具 pybind11,它提供了更好的跨平台支持和易用性[^4]。 --- #### 示例测试代码 以下是一个简单的 C++ 测试程序,验证 Python 接口是否正常工作。 ```cpp #include <Python.h> int main(int argc, char* argv[]) { Py_Initialize(); if (!Py_IsInitialized()) { PyErr_Print(); return -1; } const char* script = "print(&#39;Hello from Python!&#39;)"; PyRun_SimpleString(script); Py_Finalize(); return 0; } ``` 确保该程序能够成功链接并运行,从而证明 Python 配置无误[^5]。 --- ### 总结 以上四种方法分别对应不同的场景需求。如果仍然遇到问题,请检查以下几点: - 是否存在权限不足导致无法访问目标路径; - 系统是否存在冲突的 Python 版本; - 编译器和构建工具链是否匹配预期配置。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里 Jess

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值