赞
踩
leetcode基础题题解,由易到难,持续更新。
附leetcode每题链接。
class Solution { Map<Integer,Integer> hash = new HashMap<>(); //放前面算过的台阶 int result = 0; public int climbStairs(int n) { if(n == 1) return 1; if(n == 2) return 2; if(hash.get(n) != null) return hash.get(n);//从hashmap拿值 else { int result = climbStairs(n - 1) + climbStairs(n - 2); //递归 hash.put(n,result); //将值存入hashmap return result; } } }
class Solution {
Map<Integer,Integer> hash = new HashMap<>(); //注意List<Integer>
public int fib(int n) {
if(n == 0) return 0; // 判断用==
if(n == 1) return 1;
if(hash.get(n) != null) return hash.get(n);
else{
int result = (fib(n-1) + fib(n-2)) % 1000000007;
hash.put(n,result);
return result;
}
}
}
…………………………………………………………………………
class Solution { public int[] twoSum(int[] nums, int target) { int[] result = new int[2]; // 返回两个值,建数组 // 建立k-v ,一一对应的哈希表 Map<Integer,Integer> store = new HashMap<>(); for(int i = 0; i < nums.length; i++){ if(store.get(target - nums[i]) != null){ //if 后面{}别忘 result[0] = i; result[1] = store.get(target-nums[i]); return result; } // 将数据存入 key为补数 ,value为下标 else store.put(nums[i],i); } return result; } }
…………………………………………………………………………………………
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1 = m - 1; //p1,p2双指针,从后往前比大小,逆序排列
int p2 = n - 1;
int k = m + n - 1; //新数组指针
while(p1 >= 0 || p2 >= 0){ // 数组存在条件
if(p1 < 0) nums1[k--] = nums2[p2--]; //数组1不存在,数组2进
else if(p2 < 0) break; //数组2不存在,打断结束
else if(nums1[p1] < nums2[p2]) nums1[k--] = nums2[p2 --];
//谁大谁进
else nums1[k--] = nums1[p1--];
}
}
}
………………………………………………………………………………………………
//双指针 //遍历一遍,p1指到非零项,赋值给p2 //此时非零项到前面,将p2后置零 class Solution { public void moveZeroes(int[] nums) { int p2 = 0; for(int p1 = 0; p1 < nums.length; p1 ++){ if(nums[p1] != 0) nums[p2 ++] = nums[p1]; //遍历一遍,p1指到非零项,赋值给p2 } for(int i = p2; i < nums.length; i ++){ nums[i] = 0; //此时非零项到前面,将p2后置零 } } }
……………………………………………………………………………………
//K-1指V class Solution { public List<Integer> findDisappearedNumbers(int[] nums) { for(int num : nums){ //遍历一遍,非零置反 int index = Math.abs(num) - 1; if(nums[index] > 0) nums[index] = -nums[index]; } List<Integer> ret = new ArrayList<Integer>(); //非零加入表,找其对应值 for(int i = 0; i < nums.length; i ++){ if(nums[i] > 0) ret.add(i + 1); } return ret; } }
…………………………………………………………………………………………
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。