当前位置: 首页 > article >正文

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


http://www.kler.cn/a/463604.html

相关文章:

  • 嵌入式学习(21)-正点原子脱机下载器Mini-Pro的使用
  • 小程序学习07—— uniapp组件通信props和$emit和插槽语法
  • Spring Boot 中的 classpath详解
  • Win11电脑Cursor默认打开markdown文件,如何修改markdown文件默认打开方式为Typora?
  • Day62 图论part11
  • vscode中设置默认格式化工具pretter
  • 力扣第129题:求根到叶子节点数字之和 - C语言解法
  • 报错:nginx [emerg] open() etcnginxnginx.conf failed (2 No such file or directory)
  • 【网络协议】开放式最短路径优先协议OSPF详解(一)
  • WebRTC的三大线程
  • 设计模式の状态策略责任链模式
  • 【漫话机器学习系列】027.混淆矩阵(confusion matrix)
  • 计算机网络•自顶向下方法:DHCP、NAT、IPV6
  • 大模型WebUI:Gradio全解系列8——Additional Features:补充特性(下)
  • 如何将vCenter6.7升级7.0?
  • vSAN手动平衡磁盘
  • 对比一下Java和go的unsafe包
  • 【电路笔记】-德摩根定理
  • pycharm+anaconda创建项目
  • 短视频矩阵系统前端搭建技术解析,支持OEM
  • React之从0开始(1)
  • Nginx搭建Web网站
  • 玩转树莓派Pico(21): 迷你气象站7——软件整合改进2
  • 基于SSM(Spring + Spring MVC + MyBatis)框架的旅游资源网站
  • git reset --hard(重置到当前提交,所有未提交的更改都会被永久丢弃)
  • ubuntu中zlib安装的步骤是什么