leetcode刷题记录day007:7和387
作者:互联网
7、难度简单:
难点:
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0
环境不允许存储 64 位整数(有符号或无符号)。
表示方法:(-Math.pow(2,31))>count || count>(Math.pow(2,31)-1)
不可行处:因为题目要求不允许使用 64 位整数,即运算过程中的数字必须在 32 位有符号整数的范围内,因此我们不能直接按照上述式子计算,需要另寻他路。
如果无法超越32位,那我们就用32位能表达的极限数字除于10来和目标数据rev除于10进行比较,若没超过范围,那就让rev继续进行取数操作否则return 0。
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
return 0;
}
int digit = x % 10;
x /= 10;
rev = rev * 10 + digit;
}
return rev;
}
}
387、难度简单:
题目给的施舍:你可以假定该字符串只包含小写字母。
”不重复的字符“让我们联想到使用哈希表
方法一:使用哈希表存储频数
class Solution {
public int firstUniqChar(String s) {
Map<Character, Integer> frequency = new HashMap<Character, Integer>();
for (int i = 0; i < s.length(); ++i) {
char ch = s.charAt(i);
frequency.put(ch, frequency.getOrDefault(ch, 0) + 1);
}
for (int i = 0; i < s.length(); ++i) {
if (frequency.get(s.charAt(i)) == 1) {
return i;
}
}
return -1;
}
}
我们可以对字符串进行两次遍历。
在第一次遍历时,我们使用哈希映射统计出字符串中每个字符出现的次数。在第二次遍历时,我们只要遍历到了一个只出现一次的字符,那么就返回它的索引,否则在遍历结束后返回 -1−1。
1、s.length() 返回字符串的长度;s.charAt(i) 获取该字符串中的第i个字符;
2、HashMap的put方法:hashmap.put(K key,V value)将指定的键/值对插入到 HashMap 中。
3、hashmap.getOrDefault(Object key, V defaultValue):获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值。
题目中put方法的value值使用getOrDefault()方法来获取当前键之前的值并+1,达到记录当前字符出现的次数的目的。
由于该记录方法本就是在哈希表中顺序记录(和数组的以下标记录数据值,下标对应值又记录出现次数不同),所以我们可以直接for循环哈希表就能拿到第一个唯一字符。
标签:10,return,int,rev,frequency,哈希,387,day007,leetcode 来源: https://blog.csdn.net/m0_52937388/article/details/120400758