Easy

题目描述

给你一个字符串 date,表示格里高利历中的日期,格式为 yyyy-mm-dd

date 可以通过将年、月、日转换为它们的二进制表示(不带任何前导零)并按年-月-日的格式写下来,得到其二进制表示。

返回 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 日(包含两端)之间的有效格里高利历日期

解题思路

这道题要求将日期字符串中的年、月、日分别转换为二进制表示,然后用短横线连接。

解题思路:

  1. 字符串解析:从输入的日期字符串中提取年、月、日三部分

    • 年份:索引0-3
    • 月份:索引5-6
    • 日期:索引8-9
  2. 数值转换:将提取的字符串转换为整数

    • 可以使用 parseInt()int() 等函数
  3. 二进制转换:将整数转换为二进制字符串

    • 大多数编程语言都提供了内置的二进制转换函数
    • 如 Python 的 bin()、JavaScript 的 toString(2)
  4. 结果拼接:将三个二进制字符串用短横线连接

实现要点:

  • 注意去除二进制转换结果中可能包含的 “0b” 前缀(如 Python)
  • 转换为整数时会自动去除前导零,符合题目要求
  • 直接按照年-月-日的格式拼接即可

时间复杂度主要取决于数值转换和二进制转换的操作,整体非常高效。

代码实现

class Solution {
public:
    string convertDateToBinary(string date) {
        int year = stoi(date.substr(0, 4));
        int month = stoi(date.substr(5, 2));
        int day = stoi(date.substr(8, 2));
        
        string yearBinary = "";
        string monthBinary = "";
        string dayBinary = "";
        
        // Convert year to binary
        int temp = year;
        while (temp > 0) {
            yearBinary = char('0' + temp % 2) + yearBinary;
            temp /= 2;
        }
        
        // Convert month to binary
        temp = month;
        while (temp > 0) {
            monthBinary = char('0' + temp % 2) + monthBinary;
            temp /= 2;
        }
        
        // Convert day to binary
        temp = day;
        while (temp > 0) {
            dayBinary = char('0' + temp % 2) + dayBinary;
            temp /= 2;
        }
        
        return yearBinary + "-" + monthBinary + "-" + dayBinary;
    }
};
class Solution:
    def convertDateToBinary(self, date: str) -> str:
        year = int(date[:4])
        month = int(date[5:7])
        day = int(date[8:10])
        
        year_binary = bin(year)[2:]  # Remove '0b' prefix
        month_binary = bin(month)[2:]
        day_binary = bin(day)[2:]
        
        return year_binary + "-" + month_binary + "-" + day_binary
public class Solution {
    public string ConvertDateToBinary(string date) {
        int year = int.Parse(date.Substring(0, 4));
        int month = int.Parse(date.Substring(5, 2));
        int day = int.Parse(date.Substring(8, 2));
        
        string yearBinary = Convert.ToString(year, 2);
        string monthBinary = Convert.ToString(month, 2);
        string dayBinary = Convert.ToString(day, 2);
        
        return yearBinary + "-" + monthBinary + "-" + dayBinary;
    }
}
var convertDateToBinary = function(date) {
    const year = parseInt(date.substring(0, 4));
    const month = parseInt(date.substring(5, 7));
    const day = parseInt(date.substring(8, 10));
    
    const yearBinary = year.toString(2);
    const monthBinary = month.toString(2);
    const dayBinary = day.toString(2);
    
    return yearBinary + "-" + monthBinary + "-" + dayBinary;
};

复杂度分析

复杂度类型复杂度
时间复杂度O(log N)
空间复杂度O(log N)

其中 N 是日期中最大数值(年份),log N 主要来自于二进制转换操作。

相关题目