You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何LeetCode与PyCharm、Jupyter Notebook运行结果不一致?

Permutation Sequence 代码本地与LeetCode运行结果不一致问题

我在解决Permutation Sequence问题时碰到了个怪事:同样的代码,本地PyCharm和Jupyter Notebook输入n=3、k=3能得到正确结果,但放到LeetCode上跑结果就不对了。

我提交的LeetCode代码

class Solution(object):
    def getPermutation(self, n, k):
        list_ = []
        my_num = ''
        for i in range(n):
            list_.append(str(i + 1))
        fact = 1
        n_f = n
        k_f = k
        for i in range(n_f):
            fact *= (i+1)
        diveded = int(fact/n_f)
        if n_f == n:
            no = (k/diveded)
            if int(no) == no:
                no -= 1
                no = int(no)
            else:
                no = int(no)
            my_num += list_[no]
            list_.remove(list_[no])
            n_f -= 1
        while len(my_num) < n:
            fact = 1
            for i in range(n_f):
                fact *= (i + 1)
            no_ = int((k_f-1)%diveded)
            no = int(no_/fact)
            if int(no) == no and no_ > 0:
                no -= 1
                no = int(no)
            else:
                no = int(no)
            used = 0
            for i in range(len(my_num)):
                if int(my_num[i]) < int(list_[no]) and no > 0:
                    used += 1
            no -= used

            diveded = int(fact / n_f)

            while list_[no] in my_num:
                no += 1
            else:
                my_num += list_[no]
                list_.remove(list_[no])
                n_f -= 1
        else:
            return my_num

solu = Solution()
print(solu.getPermutation(3,3))

运行结果对比

  • 本地运行结果:
    本地运行结果
  • LeetCode运行结果:
    LeetCode运行结果

问题原因及修复方案

问题根源

  1. Python版本差异:你本地大概率用的是Python 3,/会返回浮点数;但LeetCode如果用Python 2环境,/是整数除法,这直接导致你代码里的索引计算逻辑出错。
  2. 冗余逻辑干扰:代码里的used计算、while list_[no] in my_num这类逻辑完全没必要,反而容易引入索引错误;同时diveded变量没有正确更新,导致后续的余数计算偏离预期。

修复后的代码

class Solution(object):
    def getPermutation(self, n, k):
        from math import factorial
        nums = list(map(str, range(1, n+1)))
        k -= 1  # 转成0索引,适配数组操作
        result = []
        for i in range(n, 0, -1):
            fact = factorial(i-1)
            index = k // fact
            result.append(nums.pop(index))
            k = k % fact
        return ''.join(result)

逻辑说明

  • 用math.factorial直接计算阶乘,避免手动循环计算的出错概率。
  • 将k减1转为0索引,这样可以直接用数组索引来定位当前要选的数字,不用再处理复杂的整除判断。
  • 每次循环计算剩余数字的排列数(阶乘),用k // fact得到当前数字在剩余列表中的索引,弹出该数字加入结果,再用k % fact更新k,处理剩余的排列部分。

这个版本逻辑清晰,不管在Python 2还是3环境下都能稳定运行,完全解决了本地和LeetCode结果不一致的问题。

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 16:15:56