罗马数字转整数
解题思路
- 首先将字符串转换为数组
- 再利用for循环结合switch将每个对应的字符变成对应的数字
- 利用reduce方法进行相加
代码如下:
let romanToInt = (str) => {
let sArr = str.split("")
function initNum (sArr) {
for(let i = 0; i < sArr.length; i++) {
switch(sArr[i]) {
case 'I' :
sArr[i] = 1;
break;
case 'V' :
sArr[i] = 5;
break;
case 'X' :
sArr[i] = 10;
break;
case 'L' :
sArr[i] = 50;
break;
case 'C' :
sArr[i] = 100;
break;
case 'D' :
sArr[i] = 500;
break;
case 'M' :
sArr[i] = 1000;
break;
}
}
}
initNum(sArr)
return sArr.reduce((acc, item, index, arr) => {
acc += item
if (arr[index] < arr[index + 1]) {
acc = acc - (2 * arr[index])
}
return acc
}, 0)
}
romanToInt('CM')
回文数
解题思路
- 首先判断这个数是不是小于0,小于就不是回文数
- 将数字转成字符串,定义该字符串的长度
- 利用for循环遍历,因为从前往后从后往前都是一样的,所有遍历一半即可
代码如下:
let isPalindrome = (x) => {
// 判断如果小于0则一定不是回文数
if (x >= 0) {
// 将数字转成字符串
let X = x.toString()
// 定义一个变量用来存储字符串的长度
let len = X.length
// 遍历该字符串,只需遍历一半即可
for (let i = 0; i < (len / 2); i++) {
// 如果有一个元素不满足,则返回false
if (X[i] != X[len - i - 1]) {
console.log(false);
return false
}
}
// 排除上面循环不满足条件的数字和外面套的if排除的负数,剩下的就是回文数返回true
console.log(true);
return true
}
console.log(false);
return false
}
isPalindrome(1221)