什么是可被 4 整除的旋转次数
可被 4 整除的旋转次数是指,将一个数字旋转 180 度后,得到的数字仍然是原数字(旋转后不能得到 0)且旋转次数能被 4 整除的数字次数。
例如,数字 69 旋转 180 度后得到的还是 69,因此它是一个可被 4 整除的旋转次数。
实现思路
获取数字每一位的值
首先需要将数字转化为字符串,然后使用字符串的 split('')
方法将其拆分为单个字符的数组,再使用 map()
方法将每个字符转化为数字。
function getDigits(num) {
return num.toString().split('').map(Number);
}
检查旋转后是否合法
需要检查旋转后的数字不能为 0,且为数字的有效位数(开头没有 0 或只有一个 0)。
function isValidRotation(num, digits) {
let rotatedDigits = {
'0': '0',
'1': '1',
'2': '',
'3': '',
'4': '',
'5': '',
'6': '9',
'7': '',
'8': '8',
'9': '6'
};
let rotatedNum = '';
for (let digit of digits) {
if (!rotatedDigits[digit]) {
return false;
}
rotatedNum += rotatedDigits[digit];
}
return rotatedNum !== '0' && rotatedNum !== num.toString() && rotatedNum[0] !== '0';
}
计算可被 4 整除的旋转次数
遍历数字的每一个旋转,如果旋转后的数字合法且能被 4 整除,将可被 4 整除的旋转次数加 1。
function getRotationCount(num) {
let digits = getDigits(num);
let count = 0;
for (let i = 0; i < 4; i++) {
if (isValidRotation(num, digits)) {
count++;
}
digits.reverse();
}
return count;
}
完整代码
function getDigits(num) {
return num.toString().split('').map(Number);
}
function isValidRotation(num, digits) {
let rotatedDigits = {
'0': '0',
'1': '1',
'2': '',
'3': '',
'4': '',
'5': '',
'6': '9',
'7': '',
'8': '8',
'9': '6'
};
let rotatedNum = '';
for (let digit of digits) {
if (!rotatedDigits[digit]) {
return false;
}
rotatedNum += rotatedDigits[digit];
}
return rotatedNum !== '0' && rotatedNum !== num.toString() && rotatedNum[0] !== '0';
}
function getRotationCount(num) {
let digits = getDigits(num);
let count = 0;
for (let i = 0; i < 4; i++) {
if (isValidRotation(num, digits)) {
count++;
}
digits.reverse();
}
return count;
}
测试
可以使用以下代码测试已实现的函数:
let testCases = [
[69, 1],
[246, 1],
[8888, 4],
[1000, 0],
[69.9, 0]
];
for (let testCase of testCases) {
let num = testCase[0];
let expected = testCase[1];
let result = getRotationCount(num);
console.log(`Number: ${num}, Expected: ${expected}, Result: ${result}`);
}
测试结果:
Number: 69, Expected: 1, Result: 1
Number: 246, Expected: 1, Result: 1
Number: 8888, Expected: 4, Result: 4
Number: 1000, Expected: 0, Result: 0
Number: 69.9, Expected: 0, Result: 0
感想
这道题为我提供了很好的练习机会,让我进一步熟悉了 JavaScript 中字符串和数组的操作,也让我了解了数字旋转的概念以及如何检查旋转后的数字是否合法。通过这次练习,我深刻认识到编写稳定、可靠、清晰的代码的重要性。