51.题目描述
给定一个数组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]。不能使用除法。
思路:
1 2 3 4 5
data1 data2
1 1*2*3*4*5*1
1*1 2*3*4*5*1
1*1*2 3*4*5*1
1*1*2*3 4*5*1
1*1*2*3*4 5*1
1*1*2*3*4*5 1
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
if(A.empty())
return {};
int n=A.size();
vector<int>data(n,1);
vector<int>data1(n,1);
vector<int>data2(n,1);
for(int i=1;i<n;++i)
data1[i]=data1[i-1]*A[i-1];
for(int i=n-2;i>=0;--i)
data2[i]=data2[i+1]*A[i+1];
for(int i=0;i<n;++i)
data[i]=data1[i]*data2[i];
return data;
}
};
# -*- coding:utf-8 -*-
class Solution:
def multiply(self, A):
n=len(A)
if n==0:
return A
data=[1 for i in range(n)]
data1=[1 for i in range(n)]
data2=[1 for i in range(n)]
for i in range(1,n):
data1[i]=data1[i-1]*A[i-1]
for i in range(0,n-1)[::-1]:
data2[i]=data2[i+1]*A[i+1]
for i in range(0,n):
data[i]=data1[i]*data2[i]
return data
# write code here
52.题目描述
请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配
递归终止条件:
str与pattern都结束 返回true
str不结束 pattern结束 返回false
str不结束 pattern不结束 继续递归
str结束 pattern不结束因为*无法判断,继续递归
*的问题复杂,所以针对*进行分析
下一个字符不为*则只需考虑.,str与pattern同时+1
为*则:aaa a*a
str[i]==pattern[i] 下一步则需判断aa a*a a a*a 或者aaa a 等状态。
class Solution {
public:
bool match(char* str, char* pattern)
{
if(*str=='\0' && *pattern=='\0')
return true;
if(*str!='\0' && *pattern=='\0')
return false;
if(*(pattern+1)!='*')
{
if(*str==*pattern || (*str!='\0')&& *pattern=='.')
return match(str+1,pattern+1);
else
return false;
}
else
{
if(*str==*pattern || (*str!='\0')&& *pattern=='.')
return match(str+1,pattern) || match(str,pattern+2);
else
return match(str,pattern+2);
}
return false;
}
};
# -*- coding:utf-8 -*-
import re
class Solution:
# s, pattern都是字符串
def match(self, s, pattern):
return re.match("(?:" + pattern + r")\Z", s)
# write code here