25-01-01-3280. 将日期转换为二进制表示

3280. 将日期转换为二进制表示 - 力扣(LeetCode)

c++

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
    string convertDateToBinary(string date) {
        auto bin = [](int x) -> string {
            string s = bitset<32>(x).to_string();
            return s.substr(s.find('1'));

        };
        return bin(stoi(date.substr(0, 4))) + "-" +
               bin(stoi(date.substr(5, 2))) + "-" +
               bin(stoi(date.substr(8, 2)));
    }
};

bitset

bitset主要用于处理二进制数据,bitset为模板类,初始化bitset<8>表示一个包含8个二进制位的容器。

初始化

  • 整数初始化
    1
    std::bitset<8> b1(42); //b1 = 00101010
  • 字符串初始化
    1
    std::bitset<8> b2("10101010"); //b2 = 10101010 
  • 默认构造,所有位初始化为0
    1
    std::bitset<8> b3; //b3 = 00000000

访问和操作位

  • 获取特定位置的位:
    1
    bool bit = b1[2];  // 获取第 2 位的值,b1 = 00101010,bit = 1
  • 修改特定位置的位:
    1
    b1[2] = 0;  // 设置第 2 位为 0,b1 = 00100010
  • 设置所有位为 1 或 0:
    1
    2
    b1.set();      // 设置所有位为 1,b1 = 11111111 
    b1.reset(); // 设置所有位为 0,b1 = 00000000
  • 切换某一位:
    1
    b1.flip(3);  // 翻转第 3 位,b1 = 00001000
  • 获取位集的大小(即位的数量):
    1
    2
    3
    4
    5
    size_t size = b1.size();  // size = 8`
    ```
    * 获取位集中 1 的个数:
    ```cpp
    size_t count = b1.count(); // 返回 b1 中 1 的个数
  • 检查是否所有位都为 1:
    1
    bool allSet = b1.all();  // 返回 false,因为 b1 不是所有位都为 1
  • 检查是否有任意一位为 1:
    1
    bool anySet = b1.any();  // 返回 true,如果 b1 中有任意一位为 1
  • 检查是否所有位都为 0:
    1
    bool noneSet = b1.none();  // 返回 true 如果所有位都为 0
  • 转换为字符串或数字:
    1
    std::string str = b1.to_string();  // "00000000" unsigned long num = b1.to_ulong(); // 转换为 unsigned long 类型

std::string::substr

从给定位置截取给定长度的字符串。

  • 原型
    1
    std::string substr(size_t pos = 0, size_t len = npos) const;
  • pos: 子字符串的起始位置,默认值是 0,表示从字符串的开头开始。
  • len: 要提取的子字符串的长度,默认值是 npos,表示一直提取到字符串的末尾。
  • 返回值:
    返回一个新的字符串,包含从位置 pos 开始的长度为 len 的子字符串。如果 len 超出了剩余的字符数,则会提取到字符串的末尾。

std::string::find

find 函数用于查找一个子字符串或字符在字符串中首次出现的位置。

  • 原型
    1
    2
    size_t find(const std::string& str, size_t pos = 0) const; 
    size_t find(char ch, size_t pos = 0) const;
  • str: 要查找的子字符串。
  • ch: 要查找的字符。
  • pos: 从位置 pos 开始查找,默认值是 0,表示从字符串的开头开始查找。
  • 返回值:
    • 如果找到,返回子字符串或字符首次出现的位置(索引)。这是一个 size_t 类型的值。
    • 如果未找到,返回 std::string::npos,表示没有找到该子字符串或字符

python

1
2
3
class Solution:
def convertDateToBinary(self, date: str) -> str:
return '-'.join(bin(int(s))[2:] for s in date.split('-'))

列表推导式

[表达式 for 变量 in 列表]
[out_exp_res for out_exp in input_list]
或者
[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]

Rust

1
2
3
4
5
6
7
8
impl Solution { 
pub fn convert_date_to_binary(date: String) -> String {
date.split('-')
.map(|s| format!("{:b}", s.parse::<u16>().unwrap()))
.collect::<Vec<_>>()
.join("-")
}
}

25-01-01-3280. 将日期转换为二进制表示
https://www.limesea.world/2025/01/88518523c181.html
Author
limesea
Posted on
January 12, 2025
Licensed under