20180322剑指offer题3——二维数组中的查找

一.要求

  二维数组,从左到右,从上到下递增,判断其中是否有某个特定的值,此类二维数组如下所示


二.相关概念

    注意题目要求的是数组array,在main函数中使用A=[[],[]...]即可完成初始化,不要做成矩阵的方法

三.思路

    从右上角开始查找,大于目标则去掉该列,左移查找位;小于目标则去掉该行,下移查找位。本题也可以从左下角开始查找,遇到新题型,通过实例寻找解题方法。

四.程序

#修改前
def searchnum1(A,b):
    row=len(A)
    column=len(A[0])
    i,j=0,column-1
    while A[i][j]!=b:
        if A[i][j]>b:
            if j>0:
                j-=1
            else:
                print('cannot find the number')
                return
        if A[i][j]<b:
            if i<row-1:
                i+=1
            else:
                print('cannot find the number')
                return
    print('find the number,the place is A[',i,'][',j,']')
    return
#修改后
def searchnum2(A,b):
    if not A:
        print('输入矩阵不符合要求')
        return
    if b==None:
        print('输入值不符合要求')
        return
    row=len(A)
    column=len(A[0])
    i,j=0,column-1
    while(i<row and j>=0):#不能用&
        if A[i][j]>b:j-=1
        elif A[i][j]<b:i+=1
        else:
            print('find the number,the place is A[', i, '][', j, ']')
            return
    print('cannot find the number')
    return

def main():
    A=[[1,2,8,9],
       [2,4,9,12],
       [4,7,10,13],
       [6,8,11,15]]
    b=9
    searchnum2(A,b)

if __name__=='__main__':
    main()

五.思考与总结

   修改后的程序对不规范输入情况做了限制,会print错误类型提示;此外把一些冗余功能做了精简:

1.当输入数组A为空,即A=[]时,print 输入矩阵不符合要求。

2.当输入b=None时,print 输入值不符合要求。一二两点都是通过 if not X 实现的,加强程序鲁棒性

3.还有一点需要注意的是,当查找范围超出index时的处理,不是最终会查找到A[0][0],由于指针是从右上向左下,要满足

i<row and j>=0

4.注意 and 和&是不一样的,前者为逻辑运算,后者为位运算,会发生一些奇妙的事情

 
print(i,j,row)
print(i<row , j>=0,i<row and j>=0,i<row & j>=0,True&True,1&2)
结果为:
0 3 4
True True True False True 0

5.print输出时,字符之间可以用+,但用到变量就只能用逗号,

6 .if最好严格按照缩进写,不要写一行,容易把自己绕进去

7.只有elif,if __name__=='__main__'

  没有elseif,没有if '__name__'


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值