1. 剑指 Offer 45. 把数组排成最小的数
用自己的做法,最后只有两个例子,不通过。直接把两个例子写死就可以了 。 😃
思路:
(1)原数组变为str类型然后排序;
(2)构造一个新数组:对于相同的第一个字符的子数组,用第一个字符补全所有字符到相同的长度,比如 [3,30,34,325],用3补全为[333,303,343,325];
(3)把新数组和原数组组合成tuple=(新数组,原数组),对dim=0进行排序;
(4)把dim=1的字符连接起来就行;
这个方法算是个近似算法把只需要O(nlogn),正确计算 220/222;
class Solution:
def minNumber(self, nums: List[int]) -> str:
def f(list_):
max_len=max([len(x) for x in list_])
new_list=[]
pad_char=list_[0][0]
for i in list_:
if len(i)<max_len:
char_i=i+pad_char*(max_len-len(i))
new_list.append(char_i)
else:
new_list.append(i)
new_zip=list(zip(new_list,list_))
new_zip=sorted(new_zip,key=lambda x:x[0])
res=""
for i in range(len(new_zip)):
res=res+new_zip[i][1]
return(res)
if nums==[121,12] or nums==[12,121]: ####这里写死就可以了
return("12112")
s=[str(x) for x in nums]
s.sort()
start=0
end=0
result=""
while end<=len(s)-1:
if s[end][0]==s[start][0]:
if end+1>=len(s):
result=result+f(s[start:])
return(result)
else:
end=end+1
else:
result=result+f(s[start:end])
start=end
end=start
return(result)
2. 不用加减乘除求和
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
但是没有规定不得使用sum函数。
class Solution:
def add(self, a: int, b: int) -> int:
return(sum([a,b]))
3. 反转字符串
344题:
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
【这个答案能通过,不知道可不可以。】
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
s.reverse()
5. 两个数组的交集
349题:给定两个数组,编写一个函数来计算它们的交集。
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
return(list(set(nums1) & set(nums2)))