把字符串转换成整数
题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
# -*- coding:utf-8 -*-
class Solution:
def StrToInt(self, s):
# write code here
char_arr=['0','1','2','3','4','5','6','7','8','9','+','-']
result=0
sign=1
if not s:
return 0
for char in s:
if char in char_arr:
if char=="+":
sign=1
continue
elif char=="-":
sign=-1
continue
else:
result=result*10+char_arr.index(char)
else:
result=0
break
return result*sign
数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
# -*- coding:utf-8 -*-
class Solution:
# 这里要特别注意~找到任意重复的一个值并赋值到duplication[0]
# 函数返回True/False
def duplicate(self, numbers, duplication):
# write code here
dic={}
for i in numbers:
if i not in dic:
dic[i]=1
else:
dic[i]+=1
# 此处必须另起一个循环,因为要找的是第一个有重复的数字
for i in numbers:
if dic[i]!=1:
duplication[0]=i
return True
return False
构建乘积数组
给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0] * A[1] * … * A[i-1] * A[i+1] * … * A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)
# -*- coding:utf-8 -*-
class Solution:
def multiply(self, A):
# write code here
# 以[i]为分割线,分别计算前半部分和后半部分的成绩,然后再将两部分乘起来
front=[1]
back=[1]
for i in range(len(A)-1):
front.append(front[i]*A[i])
back.append(back[i]*A[-1-i])
result=[front[j]*back[-j-1] for j in range(len(A))]
return result
正则表达式匹配
请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配
# -*- coding:utf-8 -*-
class Solution:
# s, pattern都是字符串
def match(self, s, pattern):
# write code here
if not s and not pattern:
return True
elif not pattern:
return False
elif not s:
# *:代表前一个字符出现0次或n次
if len(pattern)>1 and pattern[1]=='*':
return self.match(s,pattern[2:])
else:
return False
else:
if len(pattern)>1 and pattern[1]=='*':
if s[0]!=pattern[0] and pattern[0]!='.':
return self.match(s,pattern[2:])
else:
return self.match(s[1:],pattern) or self.match(s,pattern[2:]) or self.match(s[1:],pattern[2:])
else:
if s[0]==pattern[0] or pattern[0]=='.':
return self.match(s[1:],pattern[1:])
else:
return False
表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
# -*- coding:utf-8 -*-
class Solution:
# s字符串
def isNumeric(self, s):
# write code here
import re
return re.match(r"^[\+\-]?[0-9]*(\.[0-9]*)?([eE][\+\-]?[0-9]+)?$",s)
字符流中第一个不重复的字符
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
# -*- coding:utf-8 -*-
class Solution:
# 返回对应char
def __init__(self):
self.s=""
def FirstAppearingOnce(self):
# write code here
res=list(filter(lambda c:self.s.count(c)==1,self.s))
return res[0] if res else "#"
def Insert(self, char):
# write code here
self.s+=char
链表中环的入口结点
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def EntryNodeOfLoop(self, pHead):
# write code here
# l_fast = l_slow + ring = 2 x l_slow,l_slow = ring
slow,fast=pHead,pHead
while fast and fast.next:
slow=slow.next
fast=fast.next.next
if slow==fast:
slow2=pHead
while slow!=slow2:
slow=slow.next
slow2=slow2.next
return slow