我想解决一个反向integer problem。
这是我的递归函数,为什么Python3抱怨我的函数未定义?有什么想法吗?
class Solution:
def reverse(self, x: int) -> int:
if x < 0:
return -1 * reverse(self, x)
if x // 10 == 0:
return x
if x % 10 == 0:
return reverse(self, x // 10)
else:
return (x % 10) * 10 ** (len(str(x//10))) + reverse(self, x // 10)
我只是遵循传统的递归函数。
答案 0 :(得分:1)
方法需要通过self
进行递归调用;类/实例的范围只能通过self
(或类名本身)来显式访问,而不能通过嵌套范围来隐式访问。将reverse(self, ...)
的所有用法更改为self.reverse(...)
,它将起作用。
您可以做Solution.reverse(self, ...)
,但这无须一遍又一遍地重复类名,这比直接直接调用self.reverse
要慢。
答案 1 :(得分:1)
您的reverse()
是类中的一种方法,因此仅在代码中说reverse
便无法实现。您也无需在调用该方法时将其提供给自身。
ShadowRanger的回答给出了如何修复它的说明。
此答案应该使您更深入地了解未绑定方法和绑定方法之间的区别:https://stackoverflow.com/a/11950080/8557739
我还建议您阅读一些有关python类的基本教程。
答案 2 :(得分:1)
您的函数应如下所示:
some logic1
答案 3 :(得分:1)
您应该使用self调用反向方法。还有一个错误是您也将self作为参数传递,这不是必需的。因此您的代码的正确版本如下:
class Solution:
def reverse(self, x: int) -> int:
if x < 0:
return -1 * self.reverse(x)
if x // 10 == 0:
return x
if x % 10 == 0:
return self.reverse(x // 10)
else:
return (x % 10) * 10 ** (len(str(x//10))) + self.reverse(x // 10)
或者,您也可以不使用递归来解决此问题,此方法非常简单而且很小。您需要做的就是将整数转换为字符串并反转字符串,然后再次将其强制转换为整数。
class Solution:
def reverse(self, x: int) -> int:
x = str(x)
x = x[::-1]
x = int(x)
return x