python -- 查找二维数组

30 篇文章 0 订阅
22 篇文章 1 订阅
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# fileName : d2_search2.py
# author : zoujiameng@aliyun.com.cn

r'''题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
3,[[1,2,8,9],[3,4,9,12],[4,7,10,13],[6,8,11,15]]'''

def checked(source):
    ilen = len(source[0])
    for i in source[1:]:
        if ilen != len(i): # 每行数据个数相同
            return False

    for i in range(1, len(source)): # 保证是递增的二维数组
        for j in range(1, len(source[0])):
            if int(source[i][j]) < int(source[i][j-1]) or int(source[i][j]) < int(source[i-1][j]) or int(source[i][j]) < int(source[i-1][j-1]):
                #print("found a item not meet", source[i][j])
                return False
    return True

def searchd2array(array, target):
    if checked(array):
        ilen = len(array)
        jlen = len(array[0])
        print(ilen, jlen)
        i,j = 0,jlen-1
        while i < ilen and j >= 0:
            print("cur(%d,%d)" % (i,j), end='')
            if target == int(array[i][j]): # found target
                print(" found ", target)
                return True
            elif target < int(array[i][j]):
                j-=1
                print(" 向左走 ")
            elif target > int(array[i][j]):
                i+=1
                print(" 向下走 " )
        # 如果还是没有找到
        while i < ilen: # 向下走
            if int(array[i][j-1]) == target:
                return True
            print(" 接着向下走 " )
            i+=1
        while j >= 0: # 向左走
            if int(array[i-1][j]) == target:
                return True
            print(" 接着向左走 " )
            j-=1
        return False
    else:
        pass
        #print("The array doesn't meet demand")

def parse2(string):
    n = string.split('[', 1)[1]
    n = n.rsplit(']', 1)[0].strip()
    n = n.split("],[")
    n[0] = n[0].split('[')[1]
    n[-1] = n[-1].rsplit(']')[0]
    arr = []
    for item in n:
        arr.append(item.split(','))
    #print(arr)
    return arr

if __name__ == "__main__":
    source = str(input())
    target,array = source.split(',', 1)
    array = parse2(array.strip())
    print(target, array)
    if searchd2array(array, int(target)):
        print("true")
    else:
        print("false")

解析输入的时候,可能会有问题,因为你不知道输入的形式是如何的,我这里解析的是这种形式:
要查找的数,二维数组(中间没有空格,只会去掉首尾的空格符)

7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值