题目描述
给你一个字符串 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 日(包括这两天)。
解法
方法一:模拟
我们先将字符串 $\textit{date}$ 按照 -
分割,然后将每个部分转换为二进制表示,最后将这三个部分用 -
连接起来即可。
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串 $\textit{date}$ 的长度。
| class Solution:
def convertDateToBinary(self, date: str) -> str:
return "-".join(f"{int(s):b}" for s in date.split("-"))
|
| class Solution {
public String convertDateToBinary(String date) {
List<String> ans = new ArrayList<>();
for (var s : date.split("-")) {
int x = Integer.parseInt(s);
ans.add(Integer.toBinaryString(x));
}
return String.join("-", ans);
}
}
|
| class Solution {
public:
string convertDateToBinary(string date) {
auto bin = [](string s) -> string {
string t = bitset<32>(stoi(s)).to_string();
return t.substr(t.find('1'));
};
return bin(date.substr(0, 4)) + "-" + bin(date.substr(5, 2)) + "-" + bin(date.substr(8, 2));
}
};
|
| func convertDateToBinary(date string) string {
ans := []string{}
for _, s := range strings.Split(date, "-") {
x, _ := strconv.Atoi(s)
ans = append(ans, strconv.FormatUint(uint64(x), 2))
}
return strings.Join(ans, "-")
}
|
| function convertDateToBinary(date: string): string {
return date
.split('-')
.map(s => (+s).toString(2))
.join('-');
}
|