有趣的算法
- 如果给定的字符串是回文,返回
true
,反之,返回false
。
function palindrome(str) {
str = str.replace(/[^A-Za-z0-9]/g, '').toLowerCase();
var x = str.split('');
var t = x.every(function(v,i){
return v == x[x.length-i-1];
},x);
//return str.replace(/[^A-Za-z0-9]/g, '').toLowerCase().split('').every(function(v,i,that){return v == that[that.length-i-1]})
return t;
}
function titleCase(str) {
var temparr = str.toLowerCase().split(' ');
var res = temparr.map(function(v,i){
return v.replace(/^[a-zA-Z]{1}/,v[0].toUpperCase());
});
return res.join(' ');
}
function convert(num) {
var numStr = String(num);
var len = numStr.length;
var numArr = numStr.split('');
var result = '';
var chart = {
1: 'I',
2: 'V',
3: 'X',
4: 'L',
5: 'C',
6: 'D',
7: 'M'
};
numArr.forEach(function(v,i){
var tlen = len-i;
var temp = '';
if (tlen>3) {
temp = chart['7'].repeat(v);
} else {
if (v<4) {
temp = chart[tlen*2-1].repeat(v);
} else if (v==4) {
temp = chart[tlen*2-1]+chart[tlen*2];
} else if (v==5) {
temp = chart[tlen*2];
} else if (v>5 && v<9) {
temp = chart[tlen*2]+chart[tlen*2-1].repeat(v-5);
} else if (v==9) {
temp = chart[tlen*2-1]+chart[tlen*2+1];
} else {
throw new Error('未知的错误');
}
}
result += temp;
});
return result;
}
- Find the stray number
给定一个奇数个元素的数组,他们的值是相同的,除了一个值不同,找出这个不同的值。
example:[1, 1, 2] ==> 2
解法有三种:
// 第一种:通过数组的indexOf和lastIndexOf方法判断该元素是否在数组中唯一
function stray(arr) {
for (const val of arr) {
if (arr.indexOf(val) === arr.lastIndexOf(val)) return val
}
}
// 第二种:判断该元素的兄弟元素是否也与它相同
function stray(numbers) {
for (let i = 1,len = numbers.length;i < len;i++) {
const num = numbers[i]
if (num !== numbers[i-1] && num !== numbers[i+1]) {
return num
}
}
}
// 第三种:因为是数组个数为奇数个,所以我们可以用^运算符,思路来源于codewars
const stray = numbers => numbers.reduce(a, b) => a ^ b)