面试题67:把字符串转换成整数
- 题目描述:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
- 详细代码:
# -*- coding:utf-8 -*-
class Solution:
def StrToInt(self, s):
# write code here
if not s or len(s) <= 0:
return 0
numstr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
sum = 0
label = 1
for i in range(len(s)):
if i == 0:
if s[i] == '+':
continue
elif s[i] == '-':
label = -1
continue
if s[i] in numstr:
sum = sum * 10 + numstr.index(s[i])
else:
sum = 0
break
return sum * label
面试题68:树中两个节点的最低公共祖先
- 题目描述:
树为二叉搜索树
- 详细代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def lowestCommonAncestor(self, root, p, q):
"""
:type root: TreeNode
:type p: TreeNode
:type q: TreeNode
:rtype: TreeNode
"""
if not root:
return
if (root.val - p.val) * (root.val - q.val) <= 0:
return root
elif root.val > p.val and root.val > q.val:
return self.lowestCommonAncestor(root.left, p, q)
else:
return self.lowestCommonAncestor(root.right, p, q)
- 题目描述:
树为普通二叉树,构造指向父节点的指针
- 详细代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def lowestCommonAncestor(self, root, p, q):
"""
:type root: TreeNode
:type p: TreeNode
:type q: TreeNode
:rtype: TreeNode
"""
dict_anc = {root: None}
def bulid_dict(node):
if node:
if node.left:
dict_anc[node.left] = node
if node.right:
dict_anc[node.right] = node
build_dict(node.left)
build_dict(node.right)
build_dict(root)
l1, l2 = p, q
while l1 != l2:
l1 = dict_anc.get(l1) if l1 else q
l2 = dict_anc.get(l2) if l2 else p
return l1
- 题目描述:
树为普通二叉树,不构造指向父节点的指针,直接递归遍历
- 详细代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def lowestCommonAncestor(self, root, p, q):
"""
:type root: TreeNode
:type p: TreeNode
:type q: TreeNode
:rtype: TreeNode
"""
if not root or root == p or root == q:
return root
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)
if not left:
return right
elif not right:
return left
else:
return root