Day 1

作者: yongyong666 | 来源:发表于2019-01-16 20:49 被阅读0次

    1、两数之和

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

    示例:

    给定 nums = [2, 7, 11, 15], target = 9

    因为 nums[0] + nums[1] = 2 + 7 = 9

    所以返回 [0, 1]

    答案:

    class Solution:

        def twoSum(self, nums, target):

            """

            :type nums: List[int]

            :type target: int

            :rtype: List[int]

            """

            hashmap = {}

            for index, num in enumerate(nums):

                another_num = target - num

                if another_num in hashmap:

                    return [hashmap[another_num], index]

                hashmap[num] = index

            return None

    注:enumerate() 函数

    用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

    enumerate(sequence, [start=0])

    sequence -- 一个序列、迭代器或其他支持迭代对象。

    start -- 下标起始位置。

    返回 enumerate(枚举) 对象。

    2、整数反转

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    答案:

    class Solution:

        def reverse(self, x):

            """

            :type x: int

            :rtype: int

            """

            if x==0:

                return 0

            str_x = str(x)

            x = ''

            if str_x[0] == '-':

                x += '-'

            x += str_x[len(str_x)-1::-1].lstrip("0").rstrip("-")

            x = int(x)

            if -2**31<x<2**31-1:

                return x

            return 0

    3、回文数

    判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

    答案:

    class Solution:

        def isPalindrome(self, x):

            """

            :type x: int

            :rtype: bool

            """

            if x < 0:

                return False

            else:

                y = str(x)[::-1]

                if y == str(x):

                    return True

                else: 

                    return False

    注:str[len(str) -1::-1].lstrip("0").rstrip("-")

    str[len(str) -1::-1]:字符串[开始点,结束点,步长],步长为负,从右到左

    lstrip("0"):左边删0

    rstrip("-"):右边删-

    4、罗马字符转数字

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

    字符          数值

    I             1

    V             5

    X             10

    L             50

    C             100

    D             500

    M             1000

    例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

    通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

    I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。

    X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 

    C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

    给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

    答案:

    def romanToInt(self, s):

            """

            :type s: str

            :rtype: int

            """

            a = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}        

            ans=0        

            for i in range(len(s)):            

                if i<len(s)-1 and a[s[i]]<a[s[i+1]]:                

                    ans-=a[s[i]]

                else:

                    ans+=a[s[i]]

            return ans    

    5、最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀。

    如果不存在公共前缀,返回空字符串 ""。

    答案:

    class Solution:

        def longestCommonPrefix(self, strs):

            """

            :type strs: List[str]

            :rtype: str

            """

            if "" in strs:

                return ""

            n = len(strs)

            if n > 1:

                pr = ""

                for index,i in enumerate(strs[0]):

                    pr += i

                    for j in range(1, n):

                        if pr not in strs[j][:index+1]:

                            break

                    else:

                        continue

                    break

                else:

                    return pr

                return pr[:-1]

            else:

                return "" if not n else strs[0]

    注:下面的值在解释器中作为布尔表达式时,会被看做假

    False   None   0   ""    ()   []    {}

    循环内使用break语句时,也是可以加else的,仅在没有调用break时执行。

    这里的几个break、continue看了2个小时没看懂,不开心,明天问匡神。

    def longestCommonPrefix(self, strs):#mengmeng

            """

            :type strs: List[str]

            :rtype: str

            """

            if strs==[]:

                return ""

            out = ""

            flag = 0

            for num,i in enumerate(strs[0]):

                # print(num,i)

                for j in strs:

                    if j[:num+1]!=out+i:

                        flag=1

                        break

                if flag == 1:

                    break

                else:

                    out = out+i

            return out

    昨天纠结,浪费了太多时间,以后注意一题不要超过30min,新手切忌钻牛角尖,今天和同事交流一下,都觉得上面的程序难懂,换一个就是了,下次千万不要浪费时间。

    class Solution:#yongyong

        def longestCommonPrefix(self, strs):

            """

            :type strs: List[str]

            :rtype: str

            """

            if len(strs) == 1:

                return strs[0]

            elif len(strs) == 0:

                return ""

            else:

                res = ""

                if_break=False

                for index, letter in enumerate(strs[0]):

                    res += letter

                    # print(res)

                    for i in range(1, len(strs)):

                        # print(strs[i][:index + 1])

                        if res != strs[i][:index + 1]:

                            if_break=True

                            break

                    if if_break==True:

                        break

                if if_break == True:

                    return res[:-1]

                else:

                    return res

    法三:

    from multiprocessing.dummyimport Poolas ThreadPool#kaiyue

    question = ['flower', 'flow', 'flight']

    def get_index(x:str, i:int):

    return x[:i]

    for iin range(1, str(question[0]).__len__()):

    pool = ThreadPool(question.__len__())

    a =set(pool.map(lambda x: get_index(x=x, i=i), question))

    b =set(pool.map(lambda x: get_index(x=x, i=i+1), question))

    pool.close()

    if b.__len__() !=1:

    print(a)

    break

    相关文章

      网友评论

          本文标题:Day 1

          本文链接:https://www.haomeiwen.com/subject/wzapdqtx.html