剑指offer题Python代码及思路分享

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

思路:看到诸如此类的题,可以想这个数组的数字大小变化的规律,而当数字进行大小比较的时候,有三种情况:大于、小于、等于,关键是找一个开始查找的点,然后就可以开始比较数字了。从数组的左下角或者右上角开始找都是可以的。比如从右上角找,可以发现往下数字递增,往左数字递减。

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

#思路:从右上角开始找,往下,数字递增,往左,数字递减

class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        if len(array) == 1 or len(array[0]) == 0:
            return False
        raw, col = 0, len(array[0]) - 1
        while raw <= len(array) - 1 and col >= 0:
            x = array[raw][col]
            if x > target:
                col -= 1
            elif x < target:
                raw += 1
            else:
                return True
        return False

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

思路:Python的string有个replace函数,一句代码搞定,但是要注意字符串是不可变的,使用replcae返回的是替换后的字符串需要接受。如果不用replace函数的话,可以使用遍历的方法,定义一个新的字符串,对于遍历的每个字符进行判断,如果是空格,就修改后再添加。

# -*- coding:utf-8 -*-
'''
请实现一个函数,将一个字符串中的每个空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
'''
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        # return s.replace(' ', '%20')
        new_s = ''
        for i in s:
            if i == ' ':
                new_s += '%20'
            else:
                new_s += i

        return new_s

2.输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

思路:while循环遍历链表,将链表值保存到一个list中,然后用reverse反转。这边要注意一下reverse没有返回值,直接修改原list。

# -*- coding:utf-8 -*-
'''
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
'''
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 == None: return []
        arr = []
        while listNode.next != None:
            arr.append(listNode.val)
            listNode = listNode.next
        arr.append(listNode.val)
        # print arr
        arr.reverse()
        return arr

l1 = ListNode(67)
l2 = ListNode(0)
l3 = ListNode(24)
l4 = ListNode(58)
l1.next = l2
l2.next = l3
l3.next = l4

sl = Solution()
print sl.printListFromTailToHead(l1)

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

猜你喜欢

转载自blog.csdn.net/baidu_33718858/article/details/82877067