LeetCode 3280.将日期转换为二进制表示:库函数实现或手动转换
【LetMeFly】3280.将日期转换为二进制表示:库函数实现或手动转换
力扣题目链接:https://leetcode.cn/problems/convert-date-to-binary/
给你一个字符串 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 日(包括这两天)。
解题方法:进制转换
如果手动将一个十进制字符串转换为一个二进制字符串,应如何做?
首先将字符串转为十进制数:
十进制数初始值为0,遍历字符串,每次十进制数乘以10并加上当前遍历到的字符对应的数字。
接着将十进制数转为二进制字符串:
在十进制数不为零时,不断将十进制数对2取模后的结果添加到二进制字符串的头部,然后将十进制数除以2。
当然,现在很多主流的编程语言都有库函数以更加方便地实现。
- 时间复杂度 O ( C ) O(C) O(C),其中 C = l e n ( s ) = 10 C=len(s)=10 C=len(s)=10
- 空间复杂度 O ( C ) O(C) O(C)
AC代码
C++ - 手动转换版本
/*
* @Author: LetMeFly
* @Date: 2025-01-01 18:36:02
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-01-01 18:41:24
*/
class Solution {
private:
string ten2two(string original) {
int ten = 0;
for (char c : original) {
ten = ten * 10 + c - '0';
}
string ans;
while (ten) {
ans = char(ten % 2 + '0') + ans;
ten >>= 1;
}
return ans;
}
public:
string convertDateToBinary(string date) {
return ten2two(date.substr(0, 4)) + '-' + ten2two(date.substr(5, 2)) + '-' + ten2two(date.substr(8, 2));
}
};
C++ - 库函数版本
/*
* @Author: LetMeFly
* @Date: 2025-01-01 18:43:56
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-01-01 18:48:09
*/
class Solution {
private:
string ten2two(string s) {
int a = stoi(s);
string temp = bitset<32>(a).to_string();
return temp.substr(temp.find('1'));
}
public:
string convertDateToBinary(string date) {
return ten2two(date.substr(0, 4)) + '-' + ten2two(date.substr(5, 2)) + '-' + ten2two(date.substr(8, 2));
}
};
Python
'''
Author: LetMeFly
Date: 2025-01-01 18:49:00
LastEditors: LetMeFly.xyz
LastEditTime: 2025-01-01 18:50:23
'''
class Solution:
def convertDateToBinary(self, date: str) -> str:
return '-'.join(bin(int(s))[2:] for s in date.split('-'))
Java
/*
* @Author: LetMeFly
* @Date: 2025-01-01 18:51:17
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-01-01 18:52:45
*/
class Solution {
public String convertDateToBinary(String date) {
String[] a = date.split("-");
for (int i = 0; i < a.length; i++) {
a[i] = Integer.toBinaryString(Integer.parseInt(a[i]));
}
return String.join("-", a);
}
}
Go
/*
* @Author: LetMeFly
* @Date: 2025-01-01 18:54:58
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-01-01 18:57:15
*/
package main
import (
"strconv"
"strings"
)
func convertDateToBinary(date string) string {
a := strings.Split(date, "-")
for i := range a {
x, _ := strconv.Atoi(a[i])
a[i] = strconv.FormatUint(uint64(x), 2)
}
return strings.Join(a, "-")
}
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/144870892