很难理解这道<<剑指 offer>>里面的题的这一段代码,想请教一下大家。

2019-03-17 19:52:11 +08:00
 danzzzz
# 打印从 1 到最大的 n 位数

class Solution:
    def Increment(self, number):
        overFlow = False
        carry = 0
        length = len(number)	
        for i in range(length - 1, -1, -1):
            num = ord(number[i]) - ord('0') + carry
            if i == length - 1:           
                num += 1
            if num >= 10:
                if i == 0:
                    overFlow = True
                else:
                    num -= 10
                    carry = 1
                    number[i] = chr(ord('0') + num)
            else:
                number[i] = chr(ord('0') + num)  
                break
        return overFlow

    def PrintNum(self, number):
        string = ''.join(number)
        for i in range(len(string)):
            if string[i] != '0':
                print(string[i:])
                break

    def print1ToMaxOfNDigits(self, n):
        if n >= 0:
            number = ['0'] * n
            while not self.Increment(number):
                self.PrintNum(number)

主要是 Icreament 中的 for 循环小弟看不太懂,不懂的地方在于如何满十的时候进一个位,我比较笨,有时候绕不过来了,希望各位懂的大哥们帮帮忙,如果能得到对 Icreament 这段代码的说明就真的非常感谢了。

3179 次点击
所在节点    Python
9 条回复
ipoh
2019-03-17 20:45:20 +08:00
carry = 1 表示进位+1
jmc891205
2019-03-17 20:51:56 +08:00
num 大于 10 就表示该进位了 把 carry 设成 1
Qzier
2019-03-17 21:35:51 +08:00
代码浓浓的 Java 风
darkTianTian
2019-03-17 21:46:44 +08:00
呃,那个,Python int 没有长度限制,个人认为,如果是 python 相关岗位的话,不应该考这道题。
darkTianTian
2019-03-17 21:56:41 +08:00
https://github.com/darkTianTian/sword-for-offer 我最近也在刷第二遍,有些答案可以参考。
geelaw
2019-03-17 21:59:05 +08:00
这个代码是画蛇添足,根本不需要自己模拟进位。

class PartialSolution:
def __init__(self, n):
self.list = [''] * n
def enumInts(self, current, begin):
if current == len(self.list):
print(''.join(self.list))
else:
for i in range(begin, 10):
self.list[current] = str(i)
self.enumInts(current + 1, 0)

class Solution:
def solve(self, n):
if n >= 1:
PartialSolution(1).enumInts(0, 0)
if n >= 2:
for i in range(2, n + 1):
PartialSolution(i).enumInts(0, 1)

Solution().solve(0)
print('----')
Solution().solve(1)
print('----')
Solution().solve(2)

如果缩进被吃了你可以自己通过逻辑来还原正确的缩进
danzzzz
2019-03-17 23:04:22 +08:00
@darkTianTian 非常感谢。
xern
2019-03-18 01:48:59 +08:00
书上这个题的代码写得不好,建议网上查一下,有讲得更好的。
TheWalkingDead
2019-03-18 08:59:16 +08:00
python 用驼峰看着很不习惯~~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/545541

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX