题目描述补充:
题目:寻找镜像数字
在数字世界中,有些数字在垂直翻转(镜像)后仍然保持不变或者形成另一个有效的数字,这些数字我们称之为“镜像数字”。例如,数字“121”和“8”就是镜像数字,因为“121”翻转后仍然是“121”,而“8”翻转后依然为“8”。然而,“123”则不是镜像数字,因为它翻转后无法形成一个有效的数字。
现在,给定一个正整数N,请编写一个函数来找出并返回小于或等于N的所有镜像数字。
示例:
输入:N = 123 输出:[1, 2, 3, 8, 11, 22, 88, 101, 111, 121, 181]
注意:
- 镜像数字只考虑正整数。
- 返回的列表应该按照升序排列。
PHP代码示例:
function findMirrorNumbers($N) {
$result = [];
for ($i = 1; $i <= $N; $i++) {
$str = strval($i);
$reversed = strrev($str);
if ($str == $reversed || isMirror($str)) {
$result[] = $i;
}
}
return $result;
}
function isMirror($str) {
$length = strlen($str);
for ($i = 0; $i < $length / 2; $i++) {
if (($str[$i] != '0' && $str[$i] != '1' && $str[$i] != '8') ||
($str[$length - 1 - $i] != '0' && $str[$length - 1 - $i] != '1' && $str[$length - 1 - $i] != '8') ||
($str[$i] + $str[$length - 1 - $i] != 8 && $str[$i] != $str[$length - 1 - $i])) {
return false;
}
}
return true;
}
// 示例用法
echo implode(', ', findMirrorNumbers(123));
注意: PHP的示例中,isMirror
函数的实现是简化的,主要用于检查像“8”这样单独的数字和“11”、“88”等简单的对称情况,对于更复杂的数字如“101”等,通过直接比较翻转字符串和原字符串实现。
Python代码示例:
def find_mirror_numbers(N):
def is_mirror(num):
str_num = str(num)
return str_num == str_num[::-1] or (str_num in ['0', '1', '8'] and num == int(str_num))
return [num for num in range(1, N + 1) if is_mirror(num)]
# 示例用法
print(find_mirror_numbers(123))
JavaScript代码示例:
function findMirrorNumbers(N) {
const result = [];
for (let i = 1; i <= N; i++) {
const str = String(i);
if (str === str.split('').reverse().join('') || isSimpleMirror(str)) {
result.push(i);
}
}
return result;
}
function isSimpleMirror(str) {
return ['0', '1', '8'].includes(str) && parseInt(str) === Number(str);
}
// 示例用法
console.log(findMirrorNumbers(123).join(', '));
注意: 在JavaScript的示例中,isSimpleMirror
函数仅用于检查像“0”、“1”和“8”这样的简单镜像数字,复杂的镜像检查通过比较翻转后的字符串和原字符串实现。
码小课网站中有更多关于算法和数据结构的学习内容,可以帮助你深入理解并解决这类问题。