【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)$,其中$C=len(s)=10$
- 空间复杂度$O(C)$
AC代码
C++ - 手动转换版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
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++ - 库函数版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
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
1 2 3 4 5 6 7 8 9
| ''' 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
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