中心对称数
难度:
标签:
题目描述
代码结果
运行时间: 18 ms, 内存: 15.9 MB
/*
* 思路:
* 1. 使用Java Stream API来处理输入字符串。
* 2. 将输入字符串转换为字符流,并使用流的操作来检查中心对称性。
*/
import java.util.Map;
import java.util.stream.IntStream;
public class Solution {
public boolean isStrobogrammatic(String num) {
// 定义中心对称数字的映射关系
Map<Character, Character> map = Map.of('0', '0', '1', '1', '6', '9', '8', '8', '9', '6');
// 将字符串转换为字符流,使用IntStream检查对称性
return IntStream.range(0, (num.length() + 1) / 2)
.allMatch(i -> map.containsKey(num.charAt(i)) && map.get(num.charAt(i)) == num.charAt(num.length() - 1 - i));
}
}
解释
方法:
该题解使用双指针法来判断一个数是否为中心对称数。首先创建一个字典 strobo_dict,用于存储中心对称的字符对。然后将输入字符串转换为列表,方便进行字符操作。使用双指针 left 和 right 分别指向字符串的两端,向中间移动。在移动过程中,判断 left 和 right 指向的字符是否在 strobo_dict 中,以及它们是否对称。如果不满足条件,则返回 False。如果字符串长度为奇数,还需要判断中间字符是否为 '0'、'1' 或 '8'。如果通过所有判断,则返回 True。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
在判断中心对称数时,为什么选择双指针法而不是其他方法如递归或单循环检查?
▷🦆
字典 strobo_dict 中包含的键值对是如何选取的,是否有遗漏或多余的元素?
▷🦆
对于字符串长度为奇数的情况,中间字符只能是 '0', '1', '8',这是基于什么样的考虑?
▷🦆
对于检查过程中,当左右指针字符不匹配时直接返回 False,这种方法是否可能忽略了其他需要检查的部分?
▷