剑指offer习题集

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

思路:从左下角元素往上查找,右边元素是比这个元素大,上边是的元素比这个元素小。于是,target比这个元素小就往上找,比这个元素大就往右找。如果出了边界,则说明二维数组中不存在target元素。

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

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

class Solution:
    # s 源字符串
    def replaceSpace(self, s):
           return s.replace(" ","%20") 

三、从尾到头打印链表

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
递归思想:

# -*- coding:utf-8 -*-
# 实现一个链表类,只有一个值val和一个指向下一个节点的next'指针'
class ListNode:
     def __init__(self, x):
         self.val = x
         self.next = None
class Solution: 
# 返回从尾部到头部的列表值序列,例如[1,2,3] 
    def printListFromTailToHead(self, listNode): 
    # write code here 
        if listNode is None: 
            return [] 
        return self.printListFromTailToHead(listNode.next) + [listNode.val]

栈解法:
1.先遍历链表元素到栈
2.栈再弹出

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        lst,lst_bak = [],[]
        if not listNode:
            return lst
        while listNode:
            lst.append(listNode.val)
            listNode = listNode.next
        while lst:
            lst_bak.append(lst.pop())
        return lst_bak

你可能感兴趣的:(剑指offer习题集)