题目描述
给你一个字符串 date
,它的格式为 yyyy-mm-dd
,表示一个公历日期。
date
可以重写为二进制表示,只需要将年、月、日分别转换为对应的二进制表示(不带前导零)并遵循 year-month-day
的格式。
返回 date
的 二进制 表示。
样例
输入: date = "2080-02-29"
输出: "100000100000-10-11101"
解释:
100000100000, 10 和 11101 分别是 2080, 02 和 29 的二进制表示。
输入: 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 日(包括这两天)。
算法
(模拟) $O(n)$
- 按照题意模拟,先提取出来每一段的数字,然后将数字转为二进制字符串并返回。
时间复杂度
- 每个字符遍历一次,并将三个数字转为二进制,故时间复杂度为 $O(n)$。
空间复杂度
- 需要 $O(n)$ 的额外空间存储中间结果和答案。
C++ 代码
class Solution {
private:
string conv(const string &t) {
int x = stoi(t);
string r;
while (x) {
r += x % 2 + '0';
x /= 2;
}
reverse(r.begin(), r.end());
return r;
}
public:
string convertDateToBinary(string date) {
string ans, t;
for (char c : date) {
if (c == '-') {
ans += conv(t) + "-";
t = "";
} else {
t += c;
}
}
ans += conv(t);
return ans;
}
};