文章目录
删除所有键值对(key-value) —— clear() 方法
前言
4.3 LeetCode9-回文数 + LeetCode13-罗马数字转整数
一、回文数
方法1:反转字符串
思路:将数字转换为字符串,并检查字符串是否为回文。
问题:需要额外的非常量空间来创建问题描述中所不允许的字符串。
// 方法1:反转字符串
public boolean isPalindrome(int x) {
String s1 = "" + x;
String s2 = "";
for (int i = s1.length() - 1; i >= 0; i--) {
s2 += s1.charAt(i);
}
if(s1.equals(s2)) {
return true;
} else {
return false;
}
}
方法2:反转数字
思路:将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文数。
问题:如果反转后的数字大于 int.MAX,我们将遇到整数溢出问题。
// 方法2:反转数字
public boolean isPalindrome(int x) {
if (x < 0) return false;
int cur = 0;
int num = x;
while (num != 0) {
cur = cur * 10 + num % 10;
num /= 10;
}
return x == cur;
}
方法3:反转一半数字
思路:按照第二个想法,为了避免数字反转可能导致的溢出问题,考虑只反转 int 数字的一半。如果该数字是回文,其后半部分反转后应该与原始数字的前半部分相同。
问题:如果反转后的数字大于 int.MAX,我们将遇到整数溢出问题。
例如,输入 1221,我们可以将数字 “1221” 的后半部分从 “21” 反转为 “12”,并将其与前半部分 “12” 进行比较,因为二者相同,我们得知数字 1221 是回文。
// 方法3:反转一半数字
public boolean isPalindrome(int x) {
if (x < 0 || (x%10 == 0 && x != 0)) return false;
int cur = 0;
int num = x;
while (num > cur) {
cur = cur * 10 + num % 10;
num /= 10;
}
return num == cur || num == cur/10;
}
注意 :需考虑到 0 和末位数字为0(如10)的情况。
二、HashMap
简介
- HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
- HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
- HashMap 是无序的,即不会记录插入的顺序。
- HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
- HashMap 的 key 与 value 类型可以相同也可以不同,可以是字符串(String)类型的 key 和 value,也可以是整型(Integer)的 key 和字符串(String)类型的 value。
- HashMap 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。
基本类型对应的包装类表如下:
基本类型 | 引用类型 |
---|---|
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
引入HashMap类,并创建对象
整型(Integer)的 key 和字符串(String)类型的 value
import java.util.HashMap; // 引入 HashMap 类
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
添加元素—— put() 方法
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
访问元素—— get(key) 方法
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
System.out.println(Sites.get(3));
// 输出结果为
Taobao
删除元素—— remove(key) 方法
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
Sites.remove(4);
System.out.println(Sites);
// 输出结果为
{1=Google, 2=Runoob, 3=Taobao}
删除所有键值对(key-value) —— clear() 方法
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
Sites.clear();
System.out.println(Sites);
// 输出结果为
{}
计算元素数量—— size() 方法
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
System.out.println(Sites.size());
// 输出结果为
4
迭代 HashMap —— for-each
如果只想获取 key,可以使用 keySet() 方法,然后可以通过 get(key) 获取对应的 value;如果只想获取 value,可以使用 values() 方法。
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
// 输出 key 和 value
for (Integer i : Sites.keySet()) {
System.out.println("key: " + i + " value: " + Sites.get(i));
}
// 返回所有 value 值
for(String value: Sites.values()) {
// 输出每一个value
System.out.print(value + ", ");
}
// 输出结果为
key: 1 value: Google
key: 2 value: Runoob
key: 3 value: Taobao
key: 4 value: Zhihu
Google, Runoob, Taobao, Zhihu,
三、String删除指定字符串
str = str.replace("指定字符串", "");
四、String删除指定位置字符
由于 Java String 中没有删除元素的方法,所以可采用 substring 方法,截取掉 i 前面和 i 后面的元素,用 String Builder 或 Buffer 来接收截取的字符串。
int len = s.length();
String res = "";
// 删除字符串s中第j位的字符
for (int j = 0; j < len; j++) {
StringBuilder sb = new StringBuilder();
sb.append(s.substring(0, j));
sb.append(s.substring(j+1, len));
res = sb.toString();
}