剑指offer刷题(一)——二维数组中的查找
题目
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路
首先选取数组中右上角的数字.如果该数字等于要查找的数字,查找过程结束.如果该数字大于要查找的数组,剔出这个数字所在的列;如果该数字小于要查找的数字,剔出这个数字所在的行.也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空.
举例
如果在一个二维数组中找到数字7,则返回true,如果没有找到,则返回false。
C++
1 |
|
1 | # -*- coding:utf-8 -*- |
从左下角开始找,如果target比该元素小则网上找,如果target比该元素大则往右找
剑指offer刷题(二)——替换空格
题目
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路
先统计空格数,然后确定变换后的长度.从原字符串的尾部开始,将原字符串的非空格字符复制到相应的位置,空格字符替换成指定字符.
C++
1 |
|
Python1
2
3
4
5
6
7
8
9
10class Solution:
# s 源字符串
def replaceSpace(self, s):
Ls=list(s)
Out=''
for ss in Ls:
if(ss==' '):
ss='%20'
Out=Out+ss
return Out
剑指offer刷题(三)——从尾到头打印链表
题目
输入一个链表,返回一个反序的链表。
思路
如果我们不希望修改原链表结构,返回一个反序列表,即”后进先出”,这类似于栈的顺序.我们就可以使用栈的结构来完成该任务.
C++
1 |
|
Python1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def swap(self,pre,post):
post.next=pre
def printListFromTailToHead(self, listNode):
# write code here
if(listNode==None):
return []
head=listNode
post=head.next
head.next=None
while(post!=None):
postnext=post.next
self.swap(head,post)
head=post
post=postnext
L=[]
while(head!=None):
L.append(head.val)
head=head.next
return L
1 | # -*- coding:utf-8 -*- |