2.Add Two Numbers
原题:
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807.
翻译:
给你两个非空链表,表示两个非负整数。数字以相反的顺序存储,每个节点包含一个数字。添加这两个数字并将其作为链接列表返回。
您可以假定这两个数字不包含任何前导零,除了数字0本身。
例
输入:(2→4→3)+(5→6→4) 输出: 7→0→8 说明: 342 + 465 = 807。
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
# Define this to check if it works well
def myPrint(self):
print(self.val)
if self.next:
self.next.myPrint()
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
result = ListNode(0);
cur = result;
while l1 or l2:
cur.val += self.addTwoNodes(l1, l2)
if cur.val >= 10:
cur.val -= 10
cur.next = ListNode(1)
else:
# Check if there is need to make the next node
if l1 and l1.next or l2 and l2.next:
cur.next = ListNode(0)
cur = cur.next
if l1:
l1 = l1.next
if l2:
l2 = l2.next
return result
def addTwoNodes(self, n1, n2):
if not n1 and not n2:
# This cannot happen, ignore it
None
if not n1:
return n2.val
if not n2:
return n1.val
return n1.val + n2.val
if __name_class NodeList(object):
"""docstring for NodeList"""
def __init__(self, x):
self.val=x
self.next=None
def Creatlist(n):
if n<=0:
return False
if n==1:
return ListNode(1) # 只有一个节点
else:
root=ListNode(1)
tmp=root
for i in range(2,n+1): # 一个一个的增加节点
tmp.next=ListNode(i)
tmp=tmp.next
return root # 返回根节点
class sulotion:
"""输入两个倒序链表。相加后倒叙输出"""
def addTwoNums(self,l1,l2):
'''两个链表相加'''
result=NodeList(0)
cur=result
while l1 or l2:
cur.val+=self.addTwoNode(l1,l2)
if cur.val>=10:
cur.val-=10
cur.next=NodeList(1)
else:
if l1 and l1.next or l2 and l2.next:
cur.next=NodeList(0)
cur=cur.next
if l1:
l1=l1.next
if l2:
l2=l2.next
return result
def addTwoNode(self,n1,n2):
'''两个节点相加'''
if not n1 and not n2:
return None
if not n1:
return n2.val
if not n2:
return n1.val
return n1.val+n2.val
def printList(self, head):
'''打印链表'''
p=head
while p!=None:
print(p.val)
p=p.next
def listlen(self,head):
'''链表长度 '''
c=0
p=head
while p!=None:
c=c+1
p=p.next
return c
def insert(self,head,n): # 在n的前面插入元素
if n<1 or n>listlen(head):
return
p=head
for i in range(1,n-1): # 循环四次到达 5 (只能一个一个节点的移动 range不包含n-1)
p=p.next
a=raw_input("Enter a value:")
t=ListNode(value=a)
t.next=p.next
p.next=t
return head
def dellist(self,head,n): # 删除链表
if n<1 or n>listlen(head):
return head
elif n is 1:
head=head.next # 删除头
else:
p=head
for i in range(1,n-1):
p=p.next # 循环到达 2次
q=p.next
p.next=q.next # 把5放在3的后面
return head
if __name__=="__main__":
list=NodeList(9)
list.next=NodeList(8)
sulotion().printListFromTailToHead(list)
p=sulotion().addTwoNums(list,NodeList(1))
sulotion().printListFromTailToHead(p)
# print(sulotion().addTwoNums(list, NodeList(1)))
_ == "__main__": list = ListNode(9) list.next = ListNode(8) print(Solution().addTwoNumbers(list, ListNode(1)).myPrint()) 一些链表的操作
3.Longest Substring Without Repeating Characters
原题:
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb", the answer is "abc",
which the length is 3.
Given "bbbbb", the answer is "b",
with the length of 1.
Given "pwwkew", the answer is "wke",
with the length of 3. Note that the answer must be a substring, "pwke" is
a subsequence and not a substring.
翻译:
给定一个字符串,找到最长的子字符串的长度,不重复字符。
例子:
给定"abcabcbb"的答案是"abc",长度是3。
给定"bbbbb"的答案是"b",长度为1。
给定"pwwkew"的答案是"wke",长度为3.请注意,答案必须是一个子字符串,"pwke"是一个子序列,而不是一个子字符串。
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
max=0
for i in range(len(s)):
hash_map={}
count=0
for j in range(i,len(s)):
#判断是否在map的键中
if s[j] not in hash_map.keys():
#s[j]为键,count为值
hash_map[s[j]]=count
count+=1
if count>max:
max=count
else:
break
return max
if __name__=="__main__":
s=Solution().lengthOfLongestSubstring("pwwkew")
print(s)思路二:将没有重复字符的子串称为目标字符串。遍历字符串的所有字符,记录下每个字符最近出现的下标位置,如果该下标比目标字符串的起始下标大,说明目标字符串中已经有该字符了,刷新目标字符串的起始坐标。找出所有目标串的最大长度就是题目要求的答案。
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
if not s:
return 0
if len(s) <= 1:
return len(s)
locations = [-1 for i in range(256)]
index = -1
m = 0
for i, v in enumerate(s):
if (locations[ord(v)] > index):
index = locations[ord(v)]
m = max(m, i - index)
locations[ord(v)] = i
return m
if __name__ == "__main__":
assert Solution().lengthOfLongestSubstring("abcea") == 4
本文解析了两道经典算法题:链表求和及寻找最长无重复字符子串。详细介绍了两种方法来解决最长无重复字符子串问题。
727

被折叠的 条评论
为什么被折叠?



