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语句可以直接写在变量后面作为筛选条件,会使代码看起来简洁很多!
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
这道题主要是两个循环的顺序,也是根据自己思路做出来的,在逻辑方面还需要考虑更周到一点。