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 == 10date[4] == date[7] == '-',所有其他date[i]都是数字- 输入保证
date表示 1900 年 1 月 1 日到 2100 年 12 月 31 日(包含两端)之间的有效格里高利历日期
解题思路
这道题要求将日期字符串中的年、月、日分别转换为二进制表示,然后用短横线连接。
解题思路:
字符串解析:从输入的日期字符串中提取年、月、日三部分
- 年份:索引0-3
- 月份:索引5-6
- 日期:索引8-9
数值转换:将提取的字符串转换为整数
- 可以使用
parseInt()、int()等函数
- 可以使用
二进制转换:将整数转换为二进制字符串
- 大多数编程语言都提供了内置的二进制转换函数
- 如 Python 的
bin()、JavaScript 的toString(2)等
结果拼接:将三个二进制字符串用短横线连接
实现要点:
- 注意去除二进制转换结果中可能包含的 “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 主要来自于二进制转换操作。
相关题目
. Number of 1 Bits (Easy)
. Convert to Base -2 (Medium)