16 3sum Closest
Given an array nums
of n integers and an integer target
, find three integers in nums
such that the sum is closest to target
. Return the sum of the three integers. You may assume that each input would have exactly one solution.
Example:
Given array nums = [-1, 2, 1, -4], and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
class Solution:
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
minval = 100000
nums.sort()
for i in range(len(nums)):
# if i>0 and num[i]==num[i-1]:
# continue
left = i + 1
right = len(nums) - 1
while left < right:
val = nums[i] + nums[left] + nums[right]
if abs(val - target) < minval:
minval = abs(val - target)
result = val
if val == target:
return target
if val <= target:
left += 1
else:
right -= 1
return result
17 Letter Combinations of a phone number
Given a string containing digits from 2-9
inclusive, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.
Example:
Input: "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
class Solution:
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
def dfs(num, string, res):
if num == length:
res.append(string)
return
for letter in dict[digits[num]]:
dfs(num + 1, string + letter, res)
dict = {'2': ['a', 'b', 'c'],
'3': ['d', 'e', 'f'],
'4': ['g', 'h', 'i'],
'5': ['j', 'k', 'l'],
'6': ['m', 'n', 'o'],
'7': ['p', 'q', 'r', 's'],
'8': ['t', 'u', 'v'],
'9': ['w', 'x', 'y', 'z']
}
if digits=='':
return []
res = []
length = len(digits)
dfs(0, '', res)
return res
18 4sum
Given an array nums
of n integers and an integer target
, are there elements a, b, c, and d in nums
such that a + b + c + d = target
? Find all unique quadruplets in the array which gives the sum of target
.
Note:
The solution set must not contain duplicate quadruplets.
Example:
Given array nums = [1, 0, -1, 0, -2, 2], and target = 0. A solution set is: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]
class Solution:
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
numLen, res, dict = len(nums), set(), {}
if numLen < 4: return []
nums.sort()
for p in range(numLen):
for q in range(p + 1, numLen):
if nums[p] + nums[q] not in dict:
dict[nums[p] + nums[q]] = [(p, q)]
else:
dict[nums[p] + nums[q]].append((p, q))
for i in range(numLen):
for j in range(i + 1, numLen - 2):
T = target - nums[i] - nums[j]
if T in dict:
for k in dict[T]:
if k[0] > j:
res.add((nums[i], nums[j], nums[k[0]], nums[k[1]]))
return [list(i) for i in res]
19Remove Nth Node From End of List
Given a linked list, remove the n-th node from the end of list and return its head.
Example:
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Follow up:
Could you do this in one pass?
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
dummy = ListNode(0)
dummy.next = head
p1 = dummy
p2 = dummy
for i in range(n):
p1 = p1.next
while p1.next!=None:
p1 = p1.next
p2 = p2.next
p2.next = p2.next.next
return dummy.next
20.Vaild Parentheses
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: "()" Output: true
Example 2:
Input: "()[]{}" Output: true
Example 3:
Input: "(]" Output: false
Example 4:
Input: "([)]" Output: false
Example 5:
Input: "{[]}" Output: true
class Solution:
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
pars = [None]
parmap = {')': '(', '}': '{', ']': '['}
for c in s:
if c in parmap and parmap[c] == pars[len(pars) - 1]:
pars.pop()
else:
pars.append(c)
return len(pars) == 1