4月22日,不熟悉java,首次使用。强类型语言,写一步错一步,调一步。太难受了,哭晕了~~
小白选手,笔记记的很杂乱
哈希用法:
HashMap<Integer,Integer>hash= new HashMap<>() #定义哈希
hash.containKey(56); #是否包含key
hash.put(56,100); #存入hash对,key=56,value=100
hash.get(56); #取key=56,对应的值
HashMap不能使用基本数据类型。
原始类型 封装类
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
length是数组的一个属性值,用于求数组长度,length()是String类对象的一个成员方法,用于求String实体内容的长度。
来个题目试试:
罗马数字包含以下七种字符: I
, V
, X
, L
,C
,D
和 M
。
字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000
例如, 罗马数字 2
写做 II
,即为两个并列的 1 。12
写做 XII
,即为 X
+ II
。 27
写做 XXVII
, 即为 XX
+ V
+ II
。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII
,而是 IV
。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX
。这个特殊的规则只适用于以下六种情况:
I
可以放在V
(5) 和X
(10) 的左边,来表示 4 和 9。X
可以放在L
(50) 和C
(100) 的左边,来表示 40 和 90。C
可以放在D
(500) 和M
(1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。
示例 1:
输入: s = "III" 输出: 3
思路:哈希取值做加减。可从后往前看,右边的数比左边数大则加,如果右边数比左边小则减。
class Solution {
public int romanToInt(String s) {
//定义hash
HashMap<Character,Integer> hash=new HashMap<>();
String keys="IVXLCDM";
int[] values={1,5,10,50,100,500,1000};
int i =0;
for(i=0;i < values.length; i++){
hash.put(keys.charAt(i),values[i]);
}
//开始计算
int re=0;
int prValue=0;
for(int j=s.length()-1;j >=0 ;j--){
int value = hash.get(s.charAt(j));
if(value < prValue){
re= re - value;
}else{re= re + value;}
prValue=value;
}
return re;
}
}
4月26日
题目:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
思路:
每个字符排序,作为hash的key,循环strs,如果存在key,则表示是字母异位组合,加入此key的value中。如果不存在key,则新建一个key
解题:
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String,List> map=new HashMap<>();
for (String s : strs){
char[] chars=s.toCharArray();
Arrays.sort(chars);
String key = String.valueOf(chars);
if(map.containsKey(key)){
map.get(key).add(s);
}
else{
ArrayList<String > tmpS = new ArrayList<String>();
tmpS.add(s);
map.put(key,tmpS);
}
}
return new ArrayList(map.values());
}
}
4月28日,今天有点忙,没时间刷题,来个简单的吧!
题目:
给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。
如果可以,返回 true
;否则返回 false
。
magazine
中的每个字符只能在 ransomNote
中使用一次。
示例 2:
输入:ransomNote = "aa", magazine = "ab" 输出:false
思路:直接上图
解题:
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
HashMap<Character,Integer > maHash=new HashMap<>();
for (char a: magazine.toCharArray()){
if(maHash.containsKey(a)){
maHash.put(a,maHash.get(a)+1);
}else
{maHash.put(a,1); }
}
for (char b : ransomNote.toCharArray()) {
if (maHash.containsKey(b) && maHash.get(b)>=1){
maHash.put(b,maHash.get(b)-1);
}else
{return false; }
}
return true;
}
}