2021.02.27 剪绳子
今日题目:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
提示:2 <= n <= 58
- 思路:
自己的菜鸡代码:
class Solution {
public int cuttingRope(int n) {
if(n < 2) return 0;
if(n == 2) return 1;
if(n == 3) return 2;
int[] rec = new int[n+1];
rec[0] = 0;
rec[1] = 1;
rec[2] = 2;
rec[3] = 3;
int max;
for(int i = 4; i <= n; i++){
max = 0;
for(int j = 1; j <= i/2; j++){
if(rec[j]*rec[i-j] > max){
max = rec[j]*rec[i-j];
}
}
rec[i] = max;
}
return rec[n];
}
}
运行结果:
2021.02.14 正则表达式匹配(未做,好难)
今日题目:请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”abaca”匹配,但与”aa.a”和”ab*a”均不匹配。
- s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母以及字符 . 和 ,无连续的 ‘‘。
思路:非确定有限状态自动机
- 自己的菜鸡代码:
- 运行结果: