剑指offer Python3 版 (一)
daily learn
二维数组查找
Q:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
有不对的请大佬指正
思路 我的策略是从第一个数字开始往右找,到头了就往下一列继续往右找,直到最后一个
别把 i 和 j 搞混了
[[ * * * ]
[ * * * ]
[ * * * ]]
class Solution:
def find(self, target, array):
"""
查找一个顺序数组内是否有目标数字
@param target:
@param array:
@return:
"""
i = 0 # 行 #从头开始找
j = 0 # 列
while True:
if target == array[i][j]: # 等了就找到了
return '找到%s了' % target
if target < array[i][j]: # 反正你第一个数字都比要找的数字大,那肯定就找不到了
return '数字%s太小了' % target
if target > array[i][j]: # 要是要找的数字比array[i][j]大,就往后走
if j < len(array[0]) - 1:
j += 1
else: # 到头了就让行数+1 列变0
i += 1
j = 0
if i > len(array) - 1: # 你找到尾了,oops!
return '找不到%s' % target
if __name__ == '__main__':
s = Solution()
# 命令行输入版本
arr = list(eval(input('输入二维数组:'))) # eval要带的 不带的话arr就是个str
tar = int(input('输入要找的数字:'))
# 写死版本
# tar = 4
# arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 测试版本
# for num in range(1, 12):
# print(s.find(num, arr))
print(s.find(tar, arr))
测试可以用注释的for循环看一下
找到1了
找到2了
找到3了
找到4了
找到5了
找到6了
找到7了
找到8了
找到9了
找不到10
找不到11
空格替换
Q: 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy
这个easy
class Solution:
def replacespace(self, stringing):
"""
@param string:
@return:
"""
if ' ' in stringing:
return stringing.replace(' ', '%20')
else:
return 'no space'
if __name__ == '__main__':
s = Solution()
req = 'Hello World !'
print(s.replacespace(req))
结果展示
Hello%20World%20!
打印链表
Q: 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
说实话没怎么用到过链表,虽然简单
class Node(object):
"""
节点类
"""
def __init__(self, val):
self.val = val
self.next = None
class Solution:
def tailTohead(self, listnode):
"""
@return:
"""
result = []
while listnode:
result.append(listnode.val)
listnode = listnode.next
return result[::-1] # 一个一个放进去,再倒着return出来