LeetCode刷题之1、7、9、13、14收获汇总

1、两数之和(给定一个整数组和一个目标值,返回整数组中和为target的元素下标)

  距离做这道题过去时间有点长,只记得当时第一次用LeetCode这道题的代码写了很长,然后运行一直通不过(因为运行时间过长)现在回头看了看之前的答案。(Python版)

    def twoSum(self,nums, target):
        for i in range(len(nums)):
            if target-nums[i] in nums[i+1:]:
                return [i,nums.index(target-nums[i],i+1)]

target-nums[i]用的很是巧妙,自己当时真的没想到可以这么简单的判断出来,看到index后面的i+1参数有些疑惑,又去脚本之家查了一下,index(x,start,end),x是要索引的字符串,start是开始搜索的位置,默认情况下是0,end是结束搜索的位置,默认情况下是字符串的长度,因为题目中要求重复元素不能再被索引,所以这里要从i+1开始搜索。

补充:第二次做这道题,target-nums[i]还是记得的,不过i+1这一点还是没 注意到,首先是判断差是否在该nums中时要用一个切片来排除重复元素再被索引,然后是最后返回该元素下标时index也可以说是一个索引了,这里依旧要注意i+1。

然后想重拾一下自己的java,但是语法都想不起来了,就先去搜别人的答案先熟悉熟悉语法吧,然后用eclipse来操作试试。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int [] result=new int[2];
        for (int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                if (nums[i]+nums[j]==target){
                    result[0]=i;
                    result[1]=j;
                    break;
                }
            }
        }
        return result;
    }
}

这个方法的逻辑是简单的,是定义了一个类,然后调用类中的twoSum方法,但是这个方法的作者说用了for的嵌套感觉很low(虽然我不知道为啥),然后还是看看他说的更快的方法吧。。

hashmap应该是java中的一种数据结构,看起来有点困难。。之后再研究吧。。

7、反转整数(给定一个32位整数,将它进行反转输出)

  假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

  

def reverse(self, x):
        y=int(str(x)[::-1])if x>=0 else int('-'+str(abs(x))[::-1])
        return y if y<(1<<31)-1 and y>-(1<<31)else 0
  不得不说这个代码是真的简洁,从这里我的收获是Python中很多if,for语句可以直接写在变量后面作为筛选条件,会使代码看起来简洁很多!
9、回文数(判断一个整数是否是回文数)
def isPalindrome(self, x):     
        z=x
        if x<0:
            return False
        if x>=0 and x<10:
            return True
        y=[]
        while x!=0:
            y.append(x%10)
            x=x//10
        s=''
        for j in y:
            s=s+str(j)
        return s==str(z)

  这个题是通过自己的思路做出来的,显然代码略显繁琐,通过把数字转为字符串的方式,这道题的收获的话就是整除符号\\吧。

13、罗马数字转整数

    def romanToInt(self, s):
        sum=0
        dic={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
        for i in range(len(s)-1):
            if dic[s[i]]>=dic[s[i+1]]:
                sum+=dic[s[i]]
            else:
                sum-=dic[s[i]]
        sum+=dic[s[-1]]
        return sum

  这个题的收获的话就是我悟出了switch语句和Python中dic的关系,然后下面的加减关系也是需要通过总结观察发现的。

14、最长公共前缀(查找一个字符串数组中的最长公共前缀)

def longestCommonPrefix(self, strs):
        ss=""
        if strs==[]:
            return ss
        if len(strs)==1:
            return strs[0]
        for j in range(min(len(x) for x in strs)):
            for i in range(len(strs)-1):
                if strs[i][j]!=strs[i+1][j]:
                    return ss
            ss+=strs[i][j]
        return ss
这道题主要是两个循环的顺序,也是根据自己思路做出来的,在逻辑方面还需要考虑更周到一点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值