Pythonを使用して、整数を反転し、それが回文であるかどうかを判断します。これが逆と回文の私の定義です。正しいロジックはありますか?
def reverse(num):
s=len(num)
newnum=[None]*length
for i in num:
s=s-1
newnum[s]=i
return newnum
def palindrome(num):
a=str(num)
l=len(z)/2
if a[:1]==a[-1:][::-1]:
b=True
else:
b=False
def main
を書くのに苦労しています。
def palindrome(num):
return str(num) == str(num)[::-1]
整数にはlen()はありません。
数字が回文であるかどうかのテストは、数字がその逆に等しいかどうかのテストと同じくらい簡単です(ただし、最大の効率が必要な場合は、文字列の両端の文字を中央に達するまで比較できます)。
整数の逆を見つけるには、難しい方法で行うことができます(mod%と整数除算//を使用して各桁を見つけ、逆数を作成します)。
def reverse(num):
rev = 0
while num > 0:
rev = (10*rev) + num%10
num //= 10
return rev
または簡単な方法(番号を文字列に変換し、スライス表記を使用して文字列を反転し、整数に戻す):
def reverse(num):
return int(str(num)[::-1])
def revers(num):
rev = 0
while(num > 0):
rem = num %10
rev = (rev *10) + rem
num = num //10
return num
長いが読みやすい:
def palindrome(x):
a=""
x=str(x)
for i in range(len(x),0,-1):
a+=x[i-1]
print a
if a==x:
return True
else:
return False
これは、 pedrosorioによる回答 に一部基づいた、読み取り不可能な1行の再帰的な実装です。
_def reverse(i):
return int(i!=0) and ((i%10)*(10**int(math.log(i,10))) + reverse(i//10))
def is_palindrome(i):
return i == reverse(i)
_
整数_i ≥ 0
_に対して機能します。
reverse(123) == reverse(1230) == 321
に注意してください。これは問題ではありません。0で終わる非ゼロの整数は、いずれにしても回文ではありません。
また、整数の完全な反転はもちろん、それが回文であるかどうかを判断するために必要ではないかもしれないことに注意してください。数が回文ではないと判断された場合、早期に中止されるように、反転を実装することができます。
このコードは、intをStringに変換し、文字列が回文であるかどうかを確認します。利点は、それが高速であることであり、欠点はintをStringに変換し、それによって問題の完全な解決策と妥協することです。
negative int
同様に。
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
s = str(x)
if x >=0 :
if s == s[::-1]:
return True
else:
return False
else:
return False
このプログラムにはリストを使用しましたが、文字列でも動作します。
print('Enter Something')
a = list(input())
for i in range ((len(a)),0,-1):
print (a[i-1],end='')
import math
a = raw_input("Enter number:")
n = -1
reverse = 0
for i in a:
n += 1
digit = math.pow(10,n)
reverse = int(i)*digit + reverse
print int(reverse)
if int(reverse) == int(a):
print "Palindrome"
else:
print ":("
t=int(input("enter nos of test cases= "))
while t>0:
n=int(input("enter number="))
rev=0
while n>0:
digit=n%10
rev=rev*10+digit
n=n//10
print(rev)
t-=1