7.20
题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路:选择了最直接的一种方式:遍历
定义一个空列表 或 字符串,如果遍历的字符不是空格,直接存储,如果是空格,则存储“%20”
注意:如果定义的是列表(list),需要将list转成str,采用的是join()的方式,"".join(obj)表示直接拼接
知识点:str.join(sequence)
str可以是任何字符,sequence是个序列
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# @param s string字符串
# @return string字符串
#
class Solution:
def replaceSpace(self , s ):
# wlrite code here
l=[]
t='%20'
for i in range(len(s)):
if s[i]!=' ':
l.append(s[i])
else:
l.append(t)
s="".join(l)
return s
虽然通过了用例,但是这种解法效率不高
直接: return s.replace(' ','%20') 的效率写不高,等找到效率高的方式再补充吧,累了
7.22
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任一一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1
解题思路:(1)直接遍历,结果时间超出限制
class Solution:
def duplicate(self , numbers ):
# write code here
if len(numbers) == 0:
return -1
for i in range(len(numbers)):
if numbers[i]>len(numbers)-1 or numbers[i]<0:
return -1
for j in range(len(numbers)):
if numbers[i] == numbers[j] and i!=j:
return numbers[i]
(2)用字典
class Solution:
def duplicate(self , numbers ):
# write code here
dic={}
if not numbers:
return -1
for i in range(len(numbers)):
if numbers[i] in dic:
return numbers[i]
else:
dic[numbers[i]]=1
知识太薄弱了,这题对我竟然有点难度
7.23
题目:一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
解题思路:利用字典,只出现一次的记为1,出现两次及以上的记为2,然后把字典中为1的数据另存为列表,对列表排序
class Solution:
def FindNumsAppearOnce(self , array ):
# write code here
dic={}
for i in range(len(array)):
if array[i] in dic:
dic[array[i]]=2
else:
dic[array[i]]=1
lis=[]
for i in range(len(array)):
if dic[array[i]] == 1:
lis.append(array[i])
lis.sort()
return lis
注意:不能直接return lis.sort(),这样return的是None。sort()没有返回值,只是对原列表排序,所以要return原列表

试着优化一下:no idea
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路:两个列表
class Solution:
def reOrderArray(self , array ):
# write code here
list1=[]
list2=[]
for i in range(len(array)):
if array[i]%2 != 0:
list1.append(array[i])
else:
list2.append(array[i])
for i in range(len(list2)):
list1.append(list2[i])
return list1
![]()
内存占的有点多: 把最后一个循坏改成:
list1.extend(list2)
换成切片: list1[len(list1):len(list1)] = list2

7.27
题目:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
解题思路:看到这题的想法是递归,但是递归的结束条件怎么判断呢?又不能用if
高光:可以用return结束循环
# -*- coding:utf-8 -*-
class Solution:
def Sum_Solution(self, n):
# write code here
return n and (n + self.Sum_Solution(n-1))
注意:需要研究一下 Python中的and和or的用法
7.29
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
s=0
if number == 1 or number == 2:
return number
if number >= 3:
s =2* self.jumpFloorII(number-1)
return s
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
解题思路:一看就是一个斐波那契数列
class Solution:
def jumpFloor(self, number):
# write code here
if number ==1 or number == 2:
return number
else:
return self.jumpFloor(number-1) + self.jumpFloor(number-2)
但是,上面的代码竟然运行不通过!
class Solution:
def jumpFloor(self, number):
# write code here
prev =1
curr=2
if number ==1 or number == 2:
return number
else:
for _ in range(3,number+1):
prev,curr = curr,prev+curr
return curr
4952

被折叠的 条评论
为什么被折叠?



