力扣29. 两数相除

class Solution {
    public int divide(int dividend, int divisor) {
        if(divisor == 1) return dividend;
        if(divisor == -1 && dividend == Integer.MIN_VALUE){//Integer.MIN_VALUE
            return Integer.MAX_VALUE;
        }
        if(divisor < 0 && dividend < 0){
            return divide(-(long)dividend, -(long)divisor);
        }
        else if(dividend < 0 || divisor < 0){
            return -divide(Math.abs((long)dividend), Math.abs((long)divisor));//负号必须放前面
        }
        else return divide((long)dividend, (long)divisor);
    }

    public int divide(long dividend, long divisor){
        if (dividend < divisor) {
            return 0;
        }
        int count = 1;
        long sum = divisor;
        while(dividend >= sum){
            sum <<= 1;
            count <<= 1;
        }
        sum >>>= 1;//对正数而言,无符号和有符号右移没有区别
        count >>>= 1;//为什么是无符号右移
        return count + divide(dividend - sum, divisor);
    }
}

无符号右移:注意负数为整数的补码:先反码再+1
在这里插入图片描述

<think>好的,我现在要解决的问题是用户询问在LeetCode中使用Python和Python3有什么区别。用户可能对这两种选项感到困惑,因为都是Python,但为什么会有两个不同的选项呢。我需要详细解释它们之间的区别,帮助用户理解选择哪一个更适合。 首先,我应该回顾一下Python的版本历史。记得Python有两个主要的分支,Python2和Python3。Python2在2020年已经停止支持,所以现在大多数情况下都应该使用Python3。但LeetCode可能仍然保留Python的选项,可能是指旧的Python2环境? 接下来,LeetCode上的题目提交时,通常需要选择正确的语言版本。如果用户选择Python,可能默认是Python2,而Python3则是另一个选项。虽然现在大部分用户应该使用Python3,但有时候题目可能有不同的测试用例或者环境配置,导致行为不同。 比如,在Python2中,print是一个语句,不需要括号,而在Python3中,print是一个函数,需要括号。例如,print "hello"在Python2中可行,但在Python3中会报错,必须写成print("hello")。此外,除法运算在Python2中整数相除得到的是整数,而Python3中会得到浮点数。例如,3/2在Python2中是1,而在Python3中是1.5。这些语法差异可能会影响代码的正确性。 另外,其他区别可能包括字符串处理方式的不同。Python3中的字符串默认是Unicode,而Python2中是字节串,可能需要前缀u来声明Unicode字符串。还有,像xrange在Python2中存在,而Python3中range的行为类似于Python2的xrange。这些差异可能导致代码在不同版本中出现不同的行为或错误。 现在需要确定LeetCode中的Python和Python3具体对应的版本。根据之前的了解,LeetCode可能将Python对应到Python2,而Python3对应到Python3.x版本。但用户可能不确定,所以需要确认这一点,并建议用户使用Python3,因为Python2已经过时,而且LeetCode可能更推荐使用Python3来提交答案。 还需要提醒用户注意其他可能的差异,例如某些内置函数或库的变化。例如,在Python3中,模块名可能有变化,如Queue变成了queue。此外,输入函数在Python2中是raw_input(),而在Python3中是input()。 总结下来,用户需要知道的关键点是:Python和Python3在LeetCode中可能对应不同的解释器版本,主要区别在于语法和某些功能的行为。为了避免问题,应该优先选择Python3,并确保代码符合Python3的语法规范。同时,LeetCode可能已经淘汰了Python2的支持,但需要确认当前的情况,可能现在所有Python选项都是Python3,或者只有Python3存在,而用户看到的选项可能有不同的标签。 可能还需要检查LeetCode的官方文档或常见问题,看看是否有关于Python版本的说明。例如,如果LeetCode现在只支持Python3,那么Python和Python3的选项可能实际上是一样的,但可能用户看到的选项可能只是Python3的不同版本,比如3.6或3.8,这可能导致一些细微差别,但这种情况比较少见。 最后,应该建议用户查看题目中的提交要求,并确保使用正确的语法。如果遇到特定版本的问题,例如print语句报错,应该切换到对应的版本。但总体上,使用Python3是最安全的选择,因为Python2已经不被支持,而且LeetCode可能已经默认使用Python3作为Python的选项。</think>在 LeetCode 中,选择 **Python** 和 **Python3** 的区别本质上是 **Python2 与 Python3 的版本差异**。虽然两者都是 Python,但 Python3 是官方推荐且目前主流的版本(Python2 已于 2020 年停止维护),而 LeetCode 保留两种选项是为了兼容旧代码或特定需求。 以下是关键区别及注意事项: --- ### 1. **语法差异** - **`print` 语句 vs 函数** - Python2:`print "Hello"`(无需括号) - Python3:`print("Hello")`(必须用括号) *若在 Python3 环境使用 Python2 的 `print` 语法,会直接报错。* - **整数除法** - Python2:`3 / 2 = 1`(自动取整) - Python3:`3 / 2 = 1.5`(结果为浮点数) *若需取整,Python3 需显式使用 `//`,如 `3 // 2 = 1`。* - **Unicode 字符串** - Python2:字符串默认是字节串(需前缀 `u` 声明 Unicode,如 `u"你好"`)。 - Python3:字符串默认是 Unicode(直接写 `"你好"`)。 --- ### 2. **函数与库的变化** - **`xrange` vs `range`** - Python2:`xrange()` 生成迭代器,`range()` 返回列表。 - Python3:`range()` 等同于 Python2 的 `xrange()`,不再保留 `xrange`。 - **输入函数** - Python2:`raw_input()` 读字符串,`input()` 会解析输入内容(如数字变 int)。 - Python3:只有 `input()`,始终返回字符串。 - **模块名** - 如 Python2 的 `Queue` 模块,在 Python3 中更名为 `queue`。 --- ### 3. **LeetCode 环境细节** - **Python2 已过时**:LeetCode 的 **Python3** 环境更常用且推荐,绝大多数题目会以 Python3 为默认测试环境。 - **特例兼容**:极少数题目可能因历史原因需用 Python2,但通常题目描述会明确说明。 --- ### **如何选择?** 1. **优先选 Python3**:除非题目明确要求,否则始终用 Python3 提交。 2. **注意语法规则**:确保代码符合 Python3 的语法(如 `print()`、整除用 `//`)。 3. **测试用例差异**:Python3 对某些操作(如大数除法)更严格,需验证边界情况。 --- **示例对比:** | 操作 | Python2 代码 | Python3 代码 | |---------------------|----------------------|-----------------------| | 输出字符串 | `print "Hello"` | `print("Hello")` | | 读取输入 | `s = raw_input()` | `s = input()` | | 生成 1~5 的迭代器 | `xrange(1, 5)` | `range(1, 5)` | | 计算 3/2 | `3 / 2 → 1` | `3 / 2 → 1.5` | --- **总结**:在 LeetCode 中,**Python3 是主流选择**,语法更现代且符合最新标准。若代码在 Python3 提交失败,可检查是否误用了 Python2 的语法特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值