欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python常见基础算法题

程序员文章站 2022-11-30 14:43:14
1.判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数.示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。def is_num(num): ''' 判断传递的参数是否是回文数 :param num: 传递....

Python常见基础算法题

1.判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数.

示例 1:
输入: 121
输出: true

示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

def is_num(num):
    '''
    判断传递的参数是否是回文数
    :param num: 传递的参数
    :return: 是回文数返回True 不是则false
    '''
    num1 = str(num)
    if num1[::-1] == num1:
        return True
    else:
        return False
if __name__ == '__main__':
    print(is_num(121))

2.分别用生成器和迭代器生成斐波那契

示例 1:

输出: 1 1 2 3 5 8 13

# 迭代器
class FibIterator(object):
    def __init__(self,n):
        """实例属性的初始花和赋值"""
        self.n = n      #  数列长度
        self.current = 0    #  设置两个初始值
        self.num1 = 0
        self.num2 = 1   #  初始下标

    def __next__(self):
        """返回迭代器对象的下一位置数据"""
        # 能拿到数据的情况
        if self.current < self.n:
            num = self.num1
            self.num1,self.num2 = self.num2,self.num1+self.num2
            self.current+=1
            return num
        # 拿不到数据的情况
        else:
            raise  StopIteration    #主动抛出异常

    def __iter__(self):
        return self

if __name__ == '__main__':
    fib = FibIterator(10)
    for num in fib:
        print(num)

 # 生成器
def fib(n): # 创建一个函数
    num1,num2 = 1,1
    current = 1    # 初始值
    while current <= n:    # i小于等于n,n次数 循环的控制条件
        yield num1    # 返回a的值,但不结束函数
        num1,num2 = num2 , num1 + num2
        current += 1     # 步长值
for x in fib(10):    # 以for循环来获取yield每次的值
    print(x)

3.字符串相乘:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式

示例 :
输入: num1 = “123”, num2 = “456”
输出: “56088”

def Func(num1,num2):
    alist1 = ''
    alist2 = ''
    for i in num1:
        if i.isdigit():
           alist1 += i
    for j in num2:
        if  j.isdigit():
            alist2 += j
    str1=str(int(alist1) * int(alist2 ))
    return str1
if __name__ == '__main__':
    print(Func('11qq','zz99xx'))

4.实现一个算法来实现反转字符数组的功能,反转的要求如下:将字符数组的字符进行反转,例如 [‘b’, ’ ', ‘a’, ‘r’],变成 [‘r’, ‘a’, ’ ', ‘b’] , 将字符数组替换为反转后的数组。

解题思路:

常规的解法是创建一个相同长度的新数组,
然后把第一个数组中的元素,按倒序放入新数组中。
但更简单的方法是:利用 Python 交换变量的特性,
不需要新建数组,直接在原数组里即可完成

def reverse(self, chars):
    if chars:
        size = len(chars)
        for i in range(size // 2):
            chars[i], chars[size - 1 - i] = chars[size - 1 - i], chars[i]
        return chars
print(reverse('h','a'))

5.栈:也称下压栈,堆栈,是仅允许在表尾进行插入和删除操作的线性表,

特点:先进后出 后进先出

class Stack(object):
    def __init__(self):
        """初始化"""
        self.stack = []

    def push(self,item):
        """push(item)添加一个新的元素item到栈顶"""
        self.stack.append(item)

    def pop(self):
        """pop()弹出栈顶元素"""
        if self.stack == []:
            return None
        else:
            self.stack.pop()

    def peek(self):
        """peek()返回栈顶元素"""
        if self.stack == []:
            return None
        else:
            return self.stack[-1]

    def isEmpty(self):
        """is_empty()判断栈是否为空"""
        return self.stack == []

    def size(self):
        """size()返回栈的元素个数"""
        return len(self.stack)

if __name__ == '__main__':
    stack = Stack()
    stack.push(1)
    stack.pop()
    print(stack.peek())
    print(stack.isEmpty())
    print(stack.size())

6.队列:是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。

特点:先进先出 后进后出

class Queue(object):
    def __init__(self):
        """实例属性的初始化和赋值创建一个空的队列"""
        self.queue = []

    def enqueue(self,item):
        """往队列中添加一个item元素"""
        self.queue.append(item)

    def is_empty(self):
        """判断一个队列是否为空"""
        return self.queue==[]

    def dequeue(self):
        """从队列头部删除一个元素"""
        if self.queue==[]:
            return None
        else:
            return  self.queue.pop(0)

    def size(self):
        """返回队列大小"""
        return  len(self.queue)
if __name__ == '__main__':
    q=Queue()
    q.enqueue(1)
    q.enqueue(2)
    q.enqueue(3)
    q.enqueue(4)
    q.enqueue(5)
    print(q.is_empty())
    print("长度为:",q.size())
    print(q.dequeue())

7.去掉空格

def get_num(par_str):
    """
    :param par_str: 字符串
    :return: num
    """
    par_list = par_str.split(' ')

    print([i for i in par_list if i])
    for i in par_list:
        if "" in par_list:
            par_list.remove("")
    print(par_list)
if __name__ == '__main__':
    get_num('hello, python   hello ,   world')

8.两数之和

方法1:

def get_num_index(llist,target):
       '''
       :param target: 俩个下标值的和
       :param llist: 查看下标所用的列表
       :return: 返回符合条件的两个下标值
       '''
       y = 0
       for x,val in enumerate(llist):
           y += 1
           if llist[x] +llist[y]==target:
               return (x,y)
if __name__ == '__main__':
   print(get_num_index([1,2,3,4,5,6],7))

方法2:

def get_num_index(llist, target):
            '''
            :param target: 给定值
            :param llist: 查看条件列表
            :return: 返回符合条件的下标值
            '''
            for i in llist:
                y = target - i
                if y != 0:
                    if y in llist:
                        if llist.index(i) == llist.index(y):
                            break
                        # if llist.index(i) <= llist.index(y):
                        return llist.index(y), llist.index(i)
                else:
                    return llist.index(i)

if __name__ == '__main__':
    print(get_num_index([1, 2, 3, 4, 5, 6,13],13))

9.比较:取值第三个大的数

def func(num):
    if len(num)>=3:
        alist=[]
        for i in sorted(num):
            try:
                alist.index(i)
            except:
                alist.append(i)
        return alist[-3]
    else:
        return -1
if __name__ == '__main__':
    num=[8,7,4,2,1,6,2,1,1,8]
    print(func(num))

10.反转字符数组

# 反转字符串
def reverseString(s):
    s[0::] = s[::-1]
    print(s)


if __name__ == "__main__":
    reverseString(['b', '', 'a', 'r'])

本文地址:https://blog.csdn.net/weixin_47587864/article/details/107163406