• lintcode入门篇六


    185. 矩阵的之字型遍历

    给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。

    样例

    样例 1:
    	输入: [[1]]
    	输出:  [1]
    
    样例 2:
    	输入:   
    	[
        [1, 2,  3,  4],
        [5, 6,  7,  8],
        [9,10, 11, 12]
      ]
    
    	输出:  [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]
    
    class Solution:
        '''
        1.首先i,j都不能小于0,并且i<len(matrix) and j<len(matrix[0])
        2.一开始是往上右,upright = True
        3.如果是upright = True的话,下一个值就是i-1,j+1,否则i+1,j-1
        4.如果i<0或者j<0,则代表需要转换方向,upright=False或者True:
        如果转换方向,此时的upright =True的话,此时得分情况:
        (1).一种是j在范围内(即j<=len(matrix)-1,那么需要往右边走,j+1,i不变(此时不仅要回退到原来的i和j,而且j需要再加1)
        (2).一种是j出范围(即j==len(matrix)),那么需要往下走,i+1(此时不仅需要回退到原来的i和j,而且i需要再加1)
        如果转换方向,此时的upright =True的话,此时得分情况:
        (1).和上述相反
        (2).和上述相反
        '''
        def printZMatrix(self,matrix):
            upright = True
            res=[]
            i,j=0,0
            IsOut = False
            while True:
                if upright == True:
                    ##在此下运行的条件
                    while i>=0 and j>=0 and i <= len(matrix)-1 and j<=len(matrix[0])-1:
    ##终止条件
    if i == len(matrix)-1 and j == len(matrix[0])-1: IsOut = True break res.append(matrix[i][j]) print('upright=True:'+str(res[-1])) i = i-1 j = j+1 else: if j == len(matrix[0]): i = i+2 j = j-1 else: i = i+1 upright = False print(upright) if upright == False: print('enter') while i>=0 and j>=0 and i <= len(matrix)-1 and j<=len(matrix[0])-1: if i == len(matrix)-1 and j == len(matrix[0])-1: IsOut = True break res.append(matrix[i][j]) i = i+1 j = j-1 print('upright=False:'+str(res[-1])) else: if (i == len(matrix)): i = i-1 j = j+2 else: j = j+1 upright = True if IsOut == True: res.append(matrix[-1][-1]) break return res

    大致解释:(折腾了两小时,终于搞定,略显累赘)

    1.写入的顺序是先往右上,在往左下,在往右上,在往左下,依次写入,直到i=len(matrix)-1  and  j = len(matrix[0])-1。

    2.如果upright=True的话,取下一个元素是i-1,j+1

    upright=True的时候,如果i<0或者j>len(matrix)-1的时候,说明需要进行转换(即换方向)。

    (1).i<0,此时需要往右边走,i和j需要回退到原来的值,并且j需要再加1.

    (2).j>len(matrix)-1,此时需要往下走,i和j需要回退到原来的值,并且i需要在加1

    如果upright=False,和上述情况相反。

    204. 单例

    单例 是最为最常见的设计模式之一。对于任何时刻,如果某个类只存在且最多存在一个具体的实例,那么我们称这种设计模式为单例。例如,对于 class Mouse (不是动物的mouse哦),我们应将其设计为 singleton 模式。

    你的任务是设计一个 getInstance 方法,对于给定的类,每次调用 getInstance 时,都可得到同一个实例。

    样例

    在 Java 中:
    
    	A a = A.getInstance();
    	A b = A.getInstance();
    
    a 应等于 b
    

    挑战

    如果并发的调用 getInstance,你的程序也可以正确的执行么?

    输入测试数据 (每行一个参数)如何理解测试数据?
    class Solution:
        # @return: The same instance of this class every time
        __instance = None
        @classmethod
        def getInstance(cls):
            # write your code here
            ##如果是__instance==None的话,说明是第一次创建实例
            if cls.__instance == None:
                ##第一次创建实例通过object.__new__方法来创建
                cls.__instance = object.__new__(cls)
                return cls.__instance
            else:
                ##返回上一个对象的引用
                return cls.__instance
    ##注意这里是调用类,实现一个类仅有一个实例

    209. 第一个只出现一次的字符

    中文English

    给出一个字符串,找出第一个只出现一次的字符。

    样例

    样例 1:
    	输入: "abaccdeff"
    	输出:  'b'
    	
    	解释:
    	'b' 是第一个出现一次的字符
    
    
    样例 2:
    	输入: "aabccd"
    	输出:  'b'
    	
    	解释:
    	'b' 是第一个出现一次的字符
    
    输入测试数据 (每行一个参数)如何理解测试数据?

     第一种解法:

    class Solution:
        def firstUniqChar(self,str):
            for i in range(len(str)):
                if str.count(str[i]) == 1:
                    return str[i]

    显示超时,改用第二种解法

    class Solution:
        """
        @param str: str: the given string
        @return: char: the first unique character in a given string
        """
        def firstUniqChar(self, str):
            # Write your code here
            str_dic = {}
            
            ##循环str,循环的str的字符i作为键,值为字符i出现的次数,每次循环加1
            for i in str:
                str_dic[i] = str_dic.get(i,0)+ 1 
            #例如:str为'abaccdeff',str_dic为{'a': 2, 'b': 1, 'c': 2, 'd': 1, 'e': 1, 'f': 2}
            for j in str:
                if str_dic[j] == 1:
                    return j
  • 相关阅读:
    简析IGRP
    unicode字符集查找
    中国移动建成全球最大软交换网络 适合向3G过渡
    寻找端口与进程的关联
    framerelay
    网络工程师的素质
    E1通信的基础知识
    Indy UDP端口冲突解决
    『软考』接入网的分类
    随便写写。。
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12406164.html
Copyright © 2020-2023  润新知