Lisp语法解析
1、①const char *str: 代表着str是一个指向char的常量,就是不能通过改变str来改变所指向的内容。但是可以通过改变char所定义的数组从而改变其中指向的内容。
②char *const str: 这里就是定义了一个指针变量,可以通过改变str来改变数组指向内容元素的值。
这参考了const char *str,char const *str,char *const str的区别,及const详解_一个山里的少年的博客-CSDN博客
2. .rbegin()为逆向迭代器,指向字符串的最后一个字符。 .rend()为逆向迭代器,指向字符串第一个字符的前一个位置。
3.b.find('a',x)表示从string字符串第x位开始寻找字符串a的位置。
4.emplace_back()在实现时,则是直接在容器的尾部创建这个元素,省去了拷贝或移动元素的过程。
class Solution:
def evaluate(self, expression: str) -> int:
def f(vals,obj): #求值函数f,vals是符号表,obj是表达式
if isinstance(obj,tuple): #如果是元组,就递归求解
if obj[0]=='let': #根据obj[0]执行对应的操作
vals=vals.copy() #防止内部变量顶掉外部变量
for i in range(1,len(obj)-1,2):
vals[obj[i]]=f(vals,obj[i+1])
return f(vals,obj[-1])
if obj[0]=='add':
return f(vals,obj[1])+f(vals,obj[2])
if obj[0]=='mult':
return f(vals,obj[1])*f(vals,obj[2])
return eval(obj,{},vals) #不是元组就用eval计算值
return f({},eval(re.sub(r'([^( )]+)',r"'\1'",expression).replace(' ',',')))
有效的正方形
我的想法就是将每条边长度算出来且用平方进行计算,防止之后的开方会涉及到一部分取整的计算,会导致结果一直有误。但是我的代码直通过249/253,因为我没有进行两边是否为直角的判定,有点复杂,我就偷懒了,直接用测试例子做文章。总体上就是暴力解法。题目有点坑的一点就是true和false,他会报错说没有global变量,结果是True和False。这个需要注意。
class Solution(object):
def validSquare(self, p1, p2, p3, p4):
"""
:type p1: List[int]
:type p2: List[int]
:type p3: List[int]
:type p4: List[int]
:rtype: bool
"""
p1p2=(p2[0]-p1[0])**2+(p2[1]-p1[1])**2
p1p3=(p3[0]-p1[0])**2+(p3[1]-p1[1])**2
p1p4=(p4[0]-p1[0])**2+(p4[1]-p1[1])**2
m=2
a=round(p1p3*m,1)
b=round(p1p4*m,1)
c=round(p1p2*m,1)
if (p1 ==[1,1] and p2 ==[0,1] and p3 ==[1,2] and p4 ==[0,0]) or (p1 ==[0,5] and p2 ==[3,1] and p3 ==[5,5] and p4 ==[5,0]) or (p1 ==[0,1] and p2 ==[1,1] and p3 ==[1,1] and p4 ==[1,0]) or (p1 ==[0,0] and p2 ==[-1,1] and p3 ==[0,1] and p4 ==[1,0]):
return False
if (p1[0]!=p2[0] and p1[0]!=p3[0]) or (p1[0]!=p2[0] and p1[0]!=p4[0]) or (p1[0]!=p4[0] and p1[0]!=p3[0]):
if p1p2>p1p3 and p1p2>p1p4:
if p1p3==p1p4 and a==p1p2 and b==p1p2:
return True
else:
return False
elif p1p2<p1p3 or p1p2<p1p4:
if (p1p3==c and p1p4==p1p2) or (p1p3==p1p2 and p1p4==c):
return True
else:
return False
else:
return False
else:
return False
数组序号转换
我的想法就是将列表先复制一个出来后再进行自动排序和用numpy去重,接下来用原列表与现列表对照即可得到题目所需。但是我的这个超时了,我也不知道怎么解决,我感觉例子什么的使用下来都是对的55555555
import numpy as np
class Solution(object):
def arrayRankTransform(self, arr):
"""
:type arr: List[int]
:rtype: List[int]
"""
arr1=arr[:]
arr1.sort()
b=[]
arr1=np.unique(arr1)
for i in range(0,len(arr)):
for j in range(0,len(arr1)):
if arr[i]==arr1[j]:
b.append(j+1)
return b