1、两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
注意:map集合获取键或值:只有获得单个键的值(map.get)、获取所有键(map.Keyset)、 获取所有值(map.values)
插入题外知识:Map.Entry 里提供getKey() 、getValue()。
例子:Map<String, String> map = new HashMap<String, String>();
思路:利用map集合解决,时间复杂度只有O(n)
map集合获取键或值:只有获得单个键的值(map.get)、获取所有键(map.Keyset)、 获取所有值(map.values)并且题目要获取满足条件的索引,故只能使用map.get,并将索引值存放在Map<Integer,Integer>中的第二个Integer
即:1、map第一个Integer用来存数组的元素,第二个Integer用来存放数组的索引
2、因为map.get获取的是Map<Integer,Integer>的第二个Integer。
3、且题目要求索引,所以第二个Integer用来存放索引
class Solution {
public int[] twoSum(int[] nums, int target) {
//map第一个Integer用来存数组的元素,第二个Integer用来存放数组的索引
//因为map.get获取的是Map<Integer,Integer>的第二个Integer。
//且题目要求索引,所以第二个Integer用来存放索引
Map<Integer,Integer>map=new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(target-nums[i])){
return new int[]{map.get(target-nums[i]),i};//get是获取键的值
}
map.put(nums[i],i);
}
return null;
}
}
9、回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
class Solution {
public boolean isPalindrome(int x) {
//判断回文数还可以用stringbuffer的reverse!!!!!! 但是会溢出 -> 字符串转成int会溢出
if(x==0) return true;
if(x<0||x%10==0&&x!=0)return false;
int num=0;//回文数
while(x>num){
num=num*10+x%10;
x=x/10;
}
return x==num||x==num/10;
// x为奇数: x==num/10
// x为偶数: x==num
}
}
13、罗马数字转整数
思路:所有的罗马数字都是由七种字符组成的。首先建立一个HashMap来映射符号和值,然后对 字符串从右到左遍历,如果当前字符代表的值不小于其右边,就加上该值;否则就减去该值。以此类推到最左边的数,最终得到的结果即是答案
class Solution {
public int romanToInt(String s) {
if(s.length() == 0 || s == null){
return 0;
}
Map<Character,Integer> map = new HashMap<>();
map.put('I',1);
map.put('V',5);
map.put('X',10);
map.put('L',50);
map.put('C',100);
map.put('D',500);
map.put('M',1000);
int res=map.get(s.charAt(s.length()-1));//获取字符串最后一个字符的值
for(int i=s.length()-2;i>=0;i--){//从倒数第二个字符开始遍历到第一个字符
if(map.get(s.charAt(i)) >= map.get(s.charAt(i + 1))){
res+=map.get(s.charAt(i));
}else{
res-=map.get(s.charAt(i));
}
}
return res;
}
}