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 日。
解题思路
思路:直接转换
- 问题定义:
- 需要将一个格式为
yyyy-mm-dd
的日期字符串转换为二进制表示。
- 需要将一个格式为
- 核心算法:
- 通过分割字符串获取年、月、日,然后将它们分别转换为二进制字符串,最后将这三个二进制字符串按照原格式拼接。
- 关键步骤:
- 分割日期字符串以获取年、月、日。
- 将年、月、日转换为二进制字符串。
- 按照原格式拼接二进制字符串。
核心算法步骤
- 分割日期字符串:
- 使用
split("-")
方法按照'-'
分割日期字符串。
- 使用
- 转换为二进制字符串:
- 使用
Integer.parseInt()
将字符串转换为整数。 - 使用
Integer.toBinaryString()
将整数转换为二进制字符串。
- 使用
- 拼接二进制字符串:
- 使用
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()
方法更为直观和简单。
总结
这道题目考察了对字符串处理和基本数值转换的理解。通过直接转换的方法,可以高效地解决该问题。在实际开发中,类似的转换也经常用到,例如在数据传输、存储等方面。掌握这些基本技能对于提高开发效率和质量具有重要意义。