LeetCode 3280. 日期到二进制的转换 Java实现 库函数

3280. 日期到二进制的转换

题目来源

3280. 日期到二进制的转换

题目分析

给你一个字符串 date,它的格式为 yyyy-mm-dd,表示一个公历日期。date 可以重写为二进制表示,只需要将年、月、日分别转换为对应的二进制表示(不带前导零)并遵循 year-month-day 的格式。返回 date 的二进制表示。

题目难度

  • 难度:简单

题目标签

  • 标签:数学、数组

题目限制

  • 1 <= date.length <= 10
  • date[4] == date[7] == '-',其余的 date[i] 都是数字。
  • 输入保证 date 代表一个有效的公历日期,日期范围从 1900 年 1 月 1 日到 2100 年 12 月 31 日。

解题思路

思路:直接转换

  1. 问题定义
    • 需要将一个格式为 yyyy-mm-dd 的日期字符串转换为二进制表示。
  2. 核心算法
    • 通过分割字符串获取年、月、日,然后将它们分别转换为二进制字符串,最后将这三个二进制字符串按照原格式拼接。
  3. 关键步骤
    • 分割日期字符串以获取年、月、日。
    • 将年、月、日转换为二进制字符串。
    • 按照原格式拼接二进制字符串。

核心算法步骤

  1. 分割日期字符串
    • 使用 split("-") 方法按照 '-' 分割日期字符串。
  2. 转换为二进制字符串
    • 使用 Integer.parseInt() 将字符串转换为整数。
    • 使用 Integer.toBinaryString() 将整数转换为二进制字符串。
  3. 拼接二进制字符串
    • 使用 String.join("-", a) 将二进制字符串按照 '-' 拼接。

代码实现

以下是 Java 代码实现:

/**
 * 3280. 日期到二进制的转换
 * @param date 日期字符串
 * @return 二进制表示的日期字符串
 */
public String convertDateToBinary(String date) {
    String[] parts = date.split("-");
    for (int i = 0; i < parts.length; i++) {
        parts[i] = Integer.toBinaryString(Integer.parseInt(parts[i]));
    }
    return String.join("-", parts);
}

代码解读

  • 分割字符串date.split("-") 将日期字符串分割为年、月、日三部分。
  • 转换与拼接:遍历分割后的数组,将每部分转换为二进制字符串,然后使用 String.join() 方法将它们按照 '-' 拼接。

性能分析

  • 时间复杂度:O(1)。由于日期字符串的长度是固定的,所以处理时间也是固定的。
  • 空间复杂度:O(1)。使用的额外空间与输入大小无关,是固定的。

测试用例

你可以使用以下测试用例来验证代码的正确性:

// 测试用例1
String date1 = "2025-01-01";
System.out.println(convertDateToBinary(date1)); // 输出: "11111100101-1-1"
// 测试用例2
String date2 = "1900-12-31";
System.out.println(convertDateToBinary(date2)); // 输出: "11101110000-1100-11111"
// 测试用例3
String date3 = "2100-02-28";
System.out.println(convertDateToBinary(date3)); // 输出: "11101111100-10-11100"

扩展讨论

其他实现

  • 位运算:虽然位运算可以用于数字的二进制转换,但对于这个特定问题,使用 Integer.toBinaryString() 方法更为直观和简单。

总结

这道题目考察了对字符串处理和基本数值转换的理解。通过直接转换的方法,可以高效地解决该问题。在实际开发中,类似的转换也经常用到,例如在数据传输、存储等方面。掌握这些基本技能对于提高开发效率和质量具有重要意义。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值