进制转换——十进制转为任意进制
递归
def toStr(n,base):
convertString = "0123456789ABCDEF"
if n < base:
return convertString[n]
else:
return toStr(n//base,base) + convertString[n%base]
print(toStr(1453,16))
栈
其中Stack除了利用import导入,也可以自己实现,请看这里
解法一
from pythonds.basic import Stack
rStack = Stack()
def toStr(n,base):
convertString = "0123456789ABCDEF"
while n > 0:
if n < base:
rStack.push(convertString[n])
else:
rStack.push(convertString[n % base])
n = n // base
res = ""
while not rStack.isEmpty():
res = res + str(rStack.pop())
return res
print(toStr(1453,16))
解法二
from pythonds.basic import Stack
def baseConverter(decNumber,base):
digits = "0123456789ABCDEF"
remstack = Stack()
while decNumber > 0:
rem = decNumber % base
remstack.push(rem)
decNumber = decNumber // base
newString = ""
while not remstack.isEmpty():
newString = newString + digits[remstack.pop()]
return newString
print(baseConverter(25,2))
print(baseConverter(25,16))
参考:
递归实现:
https://runestone.academy/runestone/static/pythonds/Recursion/pythondsConvertinganIntegertoaStringinAnyBase.html
栈实现:
https://runestone.academy/runestone/static/pythonds/BasicDS/ConvertingDecimalNumberstoBinaryNumbers.html
字符串反转
递归
from test import testEqual
def reverse(s):
if len(s) <= 1:
return s
else:
return s[-1] + reverse(s[:-1])
testEqual(reverse("hello"),"olleh")
testEqual(reverse("l"),"l")
testEqual(reverse("follow"),"wollof")
testEqual(reverse(""),"")
栈
from test import testEqual
from pythonds.basic import Stack
def revstring(mystr):
s = Stack()
for i in mystr:
s.push(i)
revstr = ''
while not s.isEmpty():
revstr = revstr + s.pop()
return revstr
testEqual(revstring('apple'),'elppa')
testEqual(revstring('x'),'x')
testEqual(revstring('1234567890'),'0987654321')
参考:
https://blog.csdn.net/m0_37586991/article/details/91413840
判断回文
递归
import string
def removeWhite(s):
# 针对句子
# 去除标点符号及空格,并转为小写
for c in string.punctuation:
s = s.replace(c, "")
s = s.replace(" ", "")
s = s.lower()
print(s)
return s
def isPal(s):
# 判断回文
if len(s) <= 1:
return True
elif s[0] == s[-1]:
return isPal(s[1:-1])
else:
return False
print(isPal(removeWhite("x")))
print(isPal(removeWhite("radar")))
print(isPal(removeWhite("hello")))
print(isPal(removeWhite("")))
print(isPal(removeWhite("hannah")))
print(isPal(removeWhite("madam i'm adam")))
print(isPal(removeWhite("Live not on evil")))
print(isPal(removeWhite("aibohphobia")))
print(isPal(removeWhite("Reviled did I live, said I, as evil I did deliver")))
print(isPal(removeWhite("Go hang a salami; I'm a lasagna hog.")))
print(isPal(removeWhite("Able was I ere I saw Elba")))
print(isPal(removeWhite("Kanakanak")))
print(isPal(removeWhite("Wassamassaw")))
双端队列
Deque()的实现,请看这里
def palchecker(aString):
chardeque = Deque()
for ch in aString:
chardeque.addRear(ch)
'''
这里写为 chardeque.addFront(ch) 应该也可以
'''
stillEqual = True
while chardeque.size() > 1 and stillEqual:
first = chardeque.removeFront()
last = chardeque.removeRear()
if first != last:
stillEqual = False
return stillEqual
print(palchecker("lsdkjfskf"))
print(palchecker("radar"))
参考:
python实现双端队列并解决判断回文字符串的问题
https://runestone.academy/runestone/static/pythonds/BasicDS/PalindromeChecker.html