文章

[LeetCode] 每日一题 3280. 将日期转换为二进制表示

题目链接

https://leetcode.cn/problems/convert-date-to-binary

题目描述

给你一个字符串 date,它的格式为 yyyy-mm-dd,表示一个公历日期。

date 可以重写为二进制表示,只需要将年、月、日分别转换为对应的二进制表示(不带前导零)并遵循 year-month-day 的格式。

返回 date二进制 表示。

示例输入

示例 1

输入: date = "2080-02-29"

输出: "100000100000-10-11101"

解释:
100000100000, 10 和 11101 分别是 2080, 02 和 29 的二进制表示。

示例 2

输入: date = "1900-01-01"

输出: "11101101100-1-1"

解释:
11101101100, 1 和 1 分别是 1900, 1 和 1 的二进制表示。

提示

  • date.length == 10

  • date[4] == date[7] == '-',其余的 date[i] 都是数字。

  • 输入保证 date 代表一个有效的公历日期,日期范围从 1900 年 1 月 1 日到 2100 年 12 月 31 日(包括这两天)。

题解

思路解析

这道题的目标是将给定的日期字符串按照格式 yyyy-mm-dd 转换为二进制表示。具体步骤如下:

  1. 使用字符串分割方法将输入字符串按照 - 分隔,得到年、月、日三个部分。

  2. 将年、月、日分别解析为整数,然后转换为对应的二进制表示。

  3. 拼接转换后的二进制字符串,使用 - 作为分隔符,最终形成结果。

题目本身逻辑简单,主要考察对字符串处理和基本数据类型转换的熟练程度。

代码实现

class Solution {
    public String convertDateToBinary(String date) {
        // 按 "-" 分割日期字符串
        String[] str = date.split("-");
        // 遍历数组,将每个部分转换为二进制
        for (int i = 0; i < str.length; i++) {
            str[i] = Integer.toBinaryString(Integer.parseInt(str[i]));
        }
        // 拼接转换后的二进制字符串
        return String.join("-", str);
    }
}

复杂度分析

  • 时间复杂度
    输入字符串长度为 n,需要遍历一次字符串并分割为三部分,时间复杂度为 O(n)。转换每个部分为整数以及二进制表示所需时间为常数,因此整体复杂度为 O(n)

  • 空间复杂度
    需要存储分割后的数组和转换后的字符串,空间复杂度为 O(k),其中 k 为分割后的子字符串长度和转换后的二进制长度

总结

本题主要考察字符串分割和数据转换的基本功,通过这个练习,我们复习了常见的字符串处理技巧和基本的算法设计思路


新的一年已经到来,希望大家在编程的道路上越走越远!愿在 2025 年,你能用代码点亮梦想,用算法书写辉煌!🎉
Happy New Year! 🎆

License:  CC BY 4.0