2025-04-12:将日期转换为二进制表示。用go语言,给定一个字符串格式为 yyyy-mm-dd 的日期,表示一个公历日期。
我们可以将此日期转换为二进制格式,只需将年份、月份和日期分别转换为二进制表示(不包括前导零),并按照 year-month-day 的顺序排列。
最后,返回这个日期的二进制表示。
date.length == 10。
date[4] == date[7] == '-',其余的 date[i] 都是数字。
输入保证 date 代表一个有效的公历日期,日期范围从 1900 年 1 月 1 日到 2100 年 12 月 31 日(包括这两天)。
输入: date = "2080-02-29"。
输出: "100000100000-10-11101"。
解释:
100000100000, 10 和 11101 分别是 2080, 02 和 29 的二进制表示。
题目来自leetcode3280。
yyyy-mm-dd
的日期字符串,例如 "2080-02-29"
。yyyy
)、月份(mm
)和日期(dd
)。strconv.Atoi
)将其转换为整数类型,以便进行后续处理。-
)隔开,按照 year-month-day
的格式返回最终结果。11
位(例如 2100
),而月份和日期最多各为 7
位(例如 31
的二进制表示为 11111
)。因此,对于每一个部分的转化,我们的整体复杂度为常数级 O(1),因为输入的日期范围是有限的。因此,总的时间复杂度可以认为是 O(1)。11
,月份和日期的最大长度各为 7
,所以整个字符串的长度最多为 25
个字符 + 2
(两个短横线) = 27
个字符),因此额外空间复杂度也是 O(1),因为存储所需空间是固定的。package main
import (
"fmt"
"strconv"
)
func binary(x int) string {
var s []byte
for ; x != 0; x >>= 1 {
s = append(s, '0'+byte(x&1))
}
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
return string(s)
}
func convertDateToBinary(date string) string {
year, _ := strconv.Atoi(date[:4])
month, _ := strconv.Atoi(date[5:7])
day, _ := strconv.Atoi(date[8:])
return binary(year) + "-" + binary(month) + "-" + binary(day)
}
func main() {
date := "2080-02-29"
results := convertDateToBinary(date)
fmt.Println(results)
}
# -*-coding:utf-8-*-
def binary(x):
if x == 0:
return '0'
s = ''
while x != 0:
s = str(x & 1) + s # 将当前位插入字符串的最前面
x >>= 1 # 右移一位
return s
def convert_date_to_binary(date):
year = int(date[:4])
month = int(date[5:7])
day = int(date[8:])
return f"{binary(year)}-{binary(month)}-{binary(day)}"
if __name__ == "__main__":
date = "2080-02-29"
results = convert_date_to_binary(date)
print(results)
·