【递归】进制转换、字符串反转、判断回文

进制转换——十进制转为任意进制

递归

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

python实现栈Stack

字符串反转

递归

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值