NC65 斐波那契数列
题目链接
1、解题思路
2、代码
public class Solution {
public int Fibonacci(int n) {
if(n == 0){
return 0;
}else if(n == 1 || n == 2){
return 1;
}else{
int a = 1;
int b = 1;
for(int i = 3;i <= n;i++){
int c = b;
b = b + a;
a = c;
}
return b;
}
}
}
NC17 最长回文子串
题目链接
1、解题思路
- dp,类似那个区间dp,但是这个题目需要从后面往前面推。
2、代码
import java.util.*;
public class Solution {
public int getLongestPalindrome(String str, int n) {
boolean[][] dp = new boolean[n][n];
int len = -1;
for(int i = n - 1;i >= 0;i--){
for(int l = 0;i + l < n;l++){
int j = i + l;
if(l == 0){
dp[i][j] = true;
}else if(l == 1){
dp[i][j] = str.charAt(i) == str.charAt(j);
}else{
dp[i][j] = str.charAt(i) == str.charAt(j) && dp[i+1][j-1];
}
if(dp[i][j] && j - i + 1 > len){
len = j - i + 1;
}
}
}
return len;
}
}
NC54 数组中相加和为0的三元组
题目链接
1、解题思路
- 首先,对数组进行排序。
- 其次,固定一个起点,剩余的双指针归并。注意,要去重。
2、代码
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] nums) {
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
Arrays.sort(nums);
for(int i = 0;i < nums.length - 2;i++){
if(i != 0 && nums[i] == nums[i-1]){
continue;
}
int l = i + 1;
int r = nums.length - 1;
int sum = 0 - nums[i];
while(l < r){
if(nums[l] + nums[r] == sum){
ArrayList<Integer> temp = new ArrayList<>();
temp.add(nums[i]);
temp.add(nums[l]);
temp.add(nums[r]);
list.add(temp);
int ll = l;
int rr = r;
l++;
r--;
while(l < r && nums[l] == nums[ll]){
l++;
}
while(l < r && nums[r] == nums[rr]){
r--;
}
}else if(nums[l] + nums[r] > sum){
r--;
}else{
l++;
}
}
}
return list;
}
}