当前位置: 面试刷题>> 镜像数字 (经典算法题500道)


**题目描述补充**: 题目:**寻找镜像数字** 在数字世界中,有些数字在垂直翻转(镜像)后仍然保持不变或者形成另一个有效的数字,这些数字我们称之为“镜像数字”。例如,数字“121”和“8”就是镜像数字,因为“121”翻转后仍然是“121”,而“8”翻转后依然为“8”。然而,“123”则不是镜像数字,因为它翻转后无法形成一个有效的数字。 现在,给定一个正整数N,请编写一个函数来找出并返回小于或等于N的所有镜像数字。 **示例**: 输入:N = 123 输出:[1, 2, 3, 8, 11, 22, 88, 101, 111, 121, 181] **注意**: - 镜像数字只考虑正整数。 - 返回的列表应该按照升序排列。 **PHP代码示例**: ```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代码示例**: ```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代码示例**: ```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”这样的简单镜像数字,复杂的镜像检查通过比较翻转后的字符串和原字符串实现。 **码小课**网站中有更多关于算法和数据结构的学习内容,可以帮助你深入理解并解决这类问题。
推荐面试题