力扣(412.516)补8.21
目前由于需要,c++和Java都要开始搞起来。Java代码一定会写上,c++代码看题目难度。
看了Java代码才发现Java的字符串操作感觉更麻烦一点。
412.Fizz Buzz
这题会,不难。
class Solution {
public List<String> fizzBuzz(int n) {
List<String> ans=new ArrayList<String>();
for(int i=1;i<=n;i++){
StringBuffer a=new StringBuffer();
if(i%5==0&&i%3==0)
ans.add("FizzBuzz");
else if(i%5==0)
ans.add("Buzz");
else if(i%3==0){
ans.add("Fizz");
}
else{
a.append(i);
ans.add(a.toString());
这里要注意把stringbuffer类型转换为string类型,才能用add方法。
}
}
return ans;
}
}
516.最长回文子序列
这个子序列问题,想不到dp啊啊啊啊啊,啊啊啊。
这题跟着答案的思路,我自己用dp写,用了3层for循环,超时了诶。
因为我的遍历思路是把每个135度斜边看成一行遍历,再遍历下个135度斜边,就是斜着遍历到右上角。
果断跟着答案走。遍历思路是从右下角按横着的一行遍历,确实厉害👍🏻。
class Solution {
public int longestPalindromeSubseq(String s) {
int n = s.length();
int[][] dp = new int[n][n];
for (int i = n - 1; i >= 0; i--) {
dp[i][i] = 1;
char c1 = s.charAt(i);
for (int j = i + 1; j < n; j++) {
char c2 = s.charAt(j);
if (c1 == c2) {
dp[i][j] = dp[i + 1][j - 1] + 2;
} else {
dp[i][j] = Math.max(dp[i + 1][j], dp[i][j - 1]);
}
}
}
return dp[0][n - 1];
}
}