文章目录
- 题目
- 思路
- 代码
- 复杂度分析
- 时间复杂度
- 空间复杂度
- 结果
- 总结
题目
题目链接🔗
给你一个字符串 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 的二进制表示。
提示:
- d a t e . l e n g t h = = 10 date.length == 10 date.length==10
- d a t e [ 4 ] = = d a t e [ 7 ] = = ′ − ′ date[4] == date[7] == '-' date[4]==date[7]==′−′,其余的 d a t e [ i ] date[i] date[i] 都是数字。
- 输入保证 d a t e date date 代表一个有效的公历日期,日期范围从 1900 年 1 月 1 日到 2100 年 12 月 31 日(包括这两天)。
思路
要将日期字符串从格式 yyyy-mm-dd 转换为二进制表示的字符串,可以按照以下步骤进行:
-
解析日期字符串:将输入的日期字符串拆分为年份、月份和日期的整数值。
-
转换为二进制字符串:将上述整数值分别转换为对应的二进制字符串表示。
-
格式化输出:按照 year-month-day 的格式,将二进制字符串组合成最终结果。
代码
class Solution {
public:
string binary(int x) {
string s;
while (x) {
s.push_back('0' + (x & 1));
x >>= 1;
}
reverse(s.begin(), s.end());
return s;
}
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));
return binary(year) + "-" + binary(month) + "-" + binary(day);
}
};
复杂度分析
时间复杂度
将整数转换为二进制字符串的时间复杂度为 O(log n),其中 n 是整数的大小。由于年份、月份和日期的范围有限(年份在 1900 到 2100 之间,月份在 1 到 12 之间,日期在 1 到 31 之间),因此这些转换操作的时间复杂度可以视为常数。总体而言,时间复杂度为 O(1)
空间复杂度
存储二进制字符串所需的空间与整数的位数成正比。由于年份、月份和日期的范围有限,所需的空间也是常数。因此,空间复杂度为 O(1)
结果
总结
通过解析日期字符串,将年份、月份和日期分别转换为二进制字符串,并按照指定格式组合,最终实现了日期的二进制表示。由于涉及的数值范围有限,算法的时间和空间复杂度均为常数级别,效率较高