剑指offer题目整理(1-20题)

1、在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
    // 行数
        n=len(array)
        // 列数
        m=len(array[0])
        i=n-1
        j=0
        while i>=0 and j<=m-1:
            if array[i][j]<target:
                j+=1
            elif array[i][j]>target:
                i-=1
            else:
                return True
        return False

2、请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        l=len(s)
        new=[]
        for i in range(l):
            if s[i]==" ":
                new.append("%20")
            else:
                new.append(s[i])
        return "".join(new)

注意!
在这里插入图片描述
3、输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。(不熟练)

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        if listNode==None:
            return []
        else:
            return self.printListFromTailToHead(listNode.next)+[listNode.val]

4、输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

class Solution:
    def reConstructBinaryTree(self, pre, tin):
        if not pre or not tin:
            return None
        root = TreeNode(pre.pop(0))
        index = tin.index(root.val)
        root.left = self.reConstructBinaryTree(pre, tin[:index])
        root.right = self.reConstructBinaryTree(pre, tin[index + 1:])
        return root

pop(0)返回pop(0)的值,并且删除pre里面的pop(0)
按照中序(左根右),将数分为左右,继续回溯。
注意:if not pre or not tin 不能写成pre==None or tinNone
5、用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。(不熟练,注意注意超级难!!!)
1.队列:先进先出(First In First Out)FIFO
2.栈:先进后出(First In Last Out )FILO

1,整体思路是元素先依次进入栈1,再从栈1依次弹出到栈2,然后弹出栈2顶部的元素,整个过程就是一个队列的先进先出
2,但是在交换元素的时候需要判断两个栈的元素情况:
“进队列时”,直接进A栈
“出队列时”,将栈A的元素全部弹到栈B中,保持在“出队列状态”。
所以要做的判断是,进时,栈B是否为空,不为空,则直接弹出,空时,将栈A元素全部弹到栈B中,直到栈A为空。

class Solution:
        def __init__(self):
        self.stockA=[]
        self.stockB=[]
    def push(self, node):
        self.stockA.append(node)
    def pop(self):
        if self.stockB==[]:
            if self.stockA==[]:
                return None
            else:
                while self.stockA:
                    self.stockB.append(self.stockA.pop())
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值