力扣题目-JAVA解法
1、回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
解题思路:
通过计算 1221 / 1000, 得首位1
通过计算 1221 % 10, 可得末位 1
进行比较
再将 22 取出来继续比较,
class Solution {public boolean isPalindrome(int x) {{//边界判断if (x < 0) return false;int div = 1;//用一个变量记录数字的最高位的值,如12456的div=10000while (x / div >= 10) div *= 10;while (x > 0) {int left = x / div;int right = x % 10;if (left != right) return false;//此步骤的作用是去掉首位和末位x = (x % div) / 10;//去掉首位和末位之后,少了两位值,最高位的值应该降低100倍。div /= 100;}return true;} }
}
2、两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map = new HashMap<>();for(int i = 0; i< nums.length; i++) {if(map.containsKey(target - nums[i])) {return new int[] {map.get(target-nums[i]),i};}//为什么不存在则将当前的 (nums[i],i) 存入 map 中?因为map里最初是空的,需要逐渐将数组的值放入map中。map.put(nums[i], i);}throw new IllegalArgumentException("No two sum solution");}
}
知识点
1、HashMap
1)基本介绍
HashMap 是一种散列表,用于存储 key-value 键值对的数据结构,一般翻译为“哈希表”,提供平均时间复杂度为 O(1) 的、基于 key 级别的 get/put 等操作。
hashmap的底层是链表+数组,查找和插入的时间复杂度都是O(1)
key不能重复、value值可以重复
2)HashMap的有序性
无序:Java 8之前+Java 8之后元素的数量未达到8个或table数组长度达到64
有序:当hashmap中元素的数量达到8个并且table数组长度达到64的时候,就会将链表转换成红黑树
基本方法:
map.containsKey(key):判断该key在map中是否有key存在。如果存在则返回true。如果不存在则返回false。
map.get(key):返回指定键所映射的值。(为了提高效率和避免出现空指针等异常:尽量使用不可变对象作为Map的key;)
map.put(key,value):添加元素
2、数组
https://blog.csdn.net/ji_meng/article/details/126143070
数组是一种有序的数据结构,用来存储同一类型的集合,也就是说数组包含的变量必须是相同类型!
//动态初始化
数据类型[ ] 数组名 = new 数组名[ ]{ value1,value2,……};
eg. int[ ] arr = new arr[ ] {1,2,3};
//静态初始化 (数组元素的个数和初始化数据的格式是一样的)
数据类型[ ] 数组名 = new 数据类型[ 数组长度 ]
eg. int[ ] array = new int[10];
3、最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
class Solution {public String longestCommonPrefix(String[] strs) {if(strs.length==0)return "";String ans = strs[0];for(int i=1;i<strs.length;i++){//int j=0;for (;j<ans.length()&&j<strs[i].length();j++){ if(ans.charAt(j)!=strs[i].charAt(j))break;}//这里需要用到j,所以上面定义j不能在for的内部 ans = ans.substring(0, j);if(ans.equals(""))return "";}return ans;}
}
知识点:
length和length()的区别:
length
是 Java 中数组的一个属性,它用于返回数组的长度。
length()
是一个方法,它是 String 类型的一个成员方法。它的目的是返回字符串的内容长度。
4、有效的括号
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
class Solution {public boolean isValid(String s) {//先判断奇偶,长度为奇数不可能闭合,直接返回falseint n=s.length();if(n%2==1){return false;}Map<Character, Character> pairs = new HashMap<Character, Character>(){{put(')','(');put('}','{');put(']','[');}};Deque<Character> stack = new LinkedList<Character>();for(int i=0;i<n;i++){char ch = s.charAt(i);//若为遇到字符串右括号,继续判断逻辑;若为左括号,则入栈if(pairs.containsKey(ch)){//是否遇到右括号//若栈为空,或者取出栈顶的左括号匹配到相同类型的右括号,跳出;反之,则删除栈顶左括号。//stack.peek()取栈顶元素—左括号//pairs.get(ch)取匹配的相同类型的左括号if(stack.isEmpty() || stack.peek()!=pairs.get(ch)){return false;}stack.pop();}else{//将这个左括号放入栈顶stack.push(ch);}}return stack.isEmpty();}
}
提示:
https://mikechen.cc/28175.html
1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成
Map<Character, Character> pairs = new HashMap<Character, Character>(){{
put(‘(’,‘)’);
put(‘{’,‘}’);
put(‘[’,‘]’);
}};
Deque stack = new LinkedList();
stack.peek()
charAt()
在HashMap中经常用到containsKey()来判断键(key)是否存在
栈的基本方法:
peek() :返回栈顶元素,不在堆栈中删除它。
pop() :返回栈顶元素,并在进程中删除它。
push():在栈顶增加元素