分治法加递归
class Solution(object):
def helper(self, oper, j ,k):
if oper=='+':
return j+k
elif oper=='-':
return j-k
else:
return j*k
def diffWaysToCompute(self, input):
"""
:type input: str
:rtype: List[int]
"""
if input.isdigit():
return [int(input)]
res=[]
for i in range(len(input)):
if input[i] in "+-*":
res1 = self.diffWaysToCompute(input[:i])
res2 = self.diffWaysToCompute(input[i+1:])
for j in res1:
for k in res2:
res.append(self.helper(input[i],j,k))
return res
if input.isdigit():
return[int(input)]
递归
packagetest;publicclassStairs{/** * @authorCxl * @paramargs */publicstaticvoidmain(String[] args){intn =5;intmaxStep =3; System.out.println("方案数:"+ getStepNum(n, maxStep)); }/** * * @authorCxl * @paramn 总的台阶数 * @paramm 一次可以走的最大楼梯阶数 * @return*/privatestaticintgetStepNum(intn,intm){intsumStep =0;//总台阶数为0时,终止递归循环if(n ==0) {return1; }if(n >= m) {//如果n大于每步最大台阶数,则设置第一步为m之内的一个台阶数,然后递归循环for(inti =1; i <= m; i++) { sumStep += getStepNum(n - i, m); } }//如果n小于m,则将一步最大台阶数缩小为n,重新递归else{ sumStep = getStepNum(n, n); }returnsumStep; }}
sqrt
if x ==0;return 0
mid =left +(right-left)//2
twosum(hasmap)
链表交叉
先检验边界情况
if not head A or not headB:
return None
词异位
栈实现队列