【字符串】1556. 千位分隔数(CPP递归、Python)

这篇博客介绍了如何使用递归方法和Python的字符串操作来为整数添加千位分隔符。提供了三种不同的实现方式,包括C++的递归解法和Python的两种方法,分别是递归解法和使用format格式化字符串。代码简洁明了,虽然时间复杂度较高,但易于理解。

题目
给你一个整数 n,请你每隔三位添加点(即 “.” 符号)作为千位分隔符,并将结果以字符串格式返回。
【示例 1】
输入:n = 987
输出:“987”
【示例 2】
输入:n = 1234
输出:“1.234”
【示例 3】
输入:n = 123456789
输出:“123.456.789”
【示例 4】
输入:n = 0
输出:“0”
【提示】
0 <= n < 2^31
【代码】
【CPP】递归法

class Solution {
public:
    string thousandSeparator(int n) {
        return solve(to_string(n));
    }

    string solve(string s) {
        int n = s.length();
        if(n <= 3) {
            return s;
        }
        return solve(s.substr(0, n-3)) + "." + s.substr(n-3, 3);
    }
};

【Python】
【法1】

class Solution:
    def thousandSeparator(self, n: int) -> str:
        # 题目意思就是三位一个点
        num=str(n)
        rs=""
        time=int(len(num)/3)
        yushu=len(num)-time*3
        for i in range(1,time+1):
            if i==1:
                rs=num[-3:]+"."+rs
            else:
                rs=num[-3*i:-3*(i-1)]+"."+rs
        if yushu!=0:
            rs=num[:yushu]+"."+rs
        rs=rs[:len(rs)-1]
        return rs

【法2】

class Solution:
    def thousandSeparator(self, n: int) -> str:
        # 将int型的数字转换成字符串,然后进行字符串反转
        num=str(n)[::-1]
        cnt=0   #计数器
        rs=""   #保存结果
        l=len(num)
        for c in num:
            rs+=c
            cnt+=1
            if cnt%3==0 and cnt!=l:
                rs+='.'
        return rs[::-1]

【format格式化字符串】

class Solution:
    def thousandSeparator(self, n: int) -> str:
        rs="{:,}".format(n)
        return rs.replace(",",".")

代码十分简洁,就是时间复杂度略高,看起来十分清爽

<think> 我们参考了用户提供的多个引用,特别是引用[1]中的decodeStr函和引用[4]中的BinaryStringToInt函,以及引用[3]中提到的bin函(但bin函是整转二进制字符串,逆向操作我们更关注字符串转整)。 用户的问题是:如何将二进制字符串转换为整(即十进制整)。 根据引用: 1. 引用[1]中的decodeStr函实际上是将二进制字符串(由空格分隔的多个二进制,每个二进制表示一个字符的ASCII码)转换回字符串。其中,对于单个二进制字符串转整,使用了int(b, 2)的方法。 2. 引用[3]提到bin函用于整转二进制字符串,而逆向操作可以使用int函,如int('11000000111001', 2)将二进制字符串转换为整。 3. 引用[4]展示了一个C++内联汇编实现的二进制字符串转整的函,但用户可能更希望使用高级语言(如Python)的简单方法。 因此,我们可以总结出在Python中,将二进制字符串转换为整的最简单方法是使用内置函int,并指定基为2。 示例: binary_str = '1010011010' num = int(binary_str, 2) print(num) # 输出666 注意:二进制字符串不应包含空格(除非先分割,但用户问题中是一个表示整的二进制字符串,所以没有空格)。 另外,引用[1]中的测试代码也展示了这一点: decode_num = int(encode_num, 2) 所以,我们给出以下回答: </think> 根据提供的引用资料,二进制字符串转换为整的方法在不同编程语言中的实现如下: ### Python 实现 使用内置函 `int(binary_string, 2)` 可直接转换: ```python binary_str = "1010011010" decimal_num = int(binary_str, 2) # 输出 666 ``` *引用自测试代码示例 [^1] [^3]* ### Java 实现 1. **自定义递归算法**: ```java private static void binaryToDecimal(String binary) { int decimal = 0; for (int i = 0; i < binary.length(); i++) { decimal = decimal * 2 + (binary.charAt(i) - '0'); } System.out.println(decimal); } ``` 2. **使用内置方法**: ```java String binary = "1010011010"; int decimal = Integer.parseInt(binary, 2); // 输出 666 ``` *引用自递归算法示例 [^2]* ### C++ 实现 通过位操作逐位计算: ```cpp void BinaryStringToInt(LPCTSTR lpszBinary, LONG* a) { for (int i = _tcslen(lpszBinary) - 1, BitOffset = 0; i >= 0; i--, BitOffset++) { if (lpszBinary[i] == TEXT('1')) { __asm { mov eax, BitOffset mov ebx, a; bts dword ptr [ebx], eax } } } } ``` *引用自内联汇编实现 [^4]* ### 核心逻辑 所有方法的本质都是按权展开公式: $$decimal = \sum_{k=0}^{n} (bit_k \times 2^k)$$ 其中 $bit_k$ 是二进制字符串从右向左的第 $k$ 位(0或1)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值