codewar1

作者: 李奔 | 来源:发表于2017-10-10 19:05 被阅读0次

一道题目:Descending Order。要求给出一个数字,把它自身的数位上的数从大到小排序一遍。涉及数字,字符串,数组的转换。

function descendingOrder(n){
  return parseInt(String(n).split('').sort().reverse().join(''))
}

因为转换后数组中元素的类型是字符串,但是单个数字,却也可以直接用sort().而没必要用map遍历再转化为数字.试看如下解法

function descendingOrder(n){
  return +(n + '').split('').sort(function(a,b){ return b - a }).join('');
}

刺激吧,实际上是用了unary plus operator,n+''是转化为字符串,最后又将字符串用+转换为数字。

Find the odd int

给定一个数字数组,找出其中只出现过奇数次的数字。符合要求的数字只有一个。

刚开始的思路是用includes()方法建立一个去重后的数组a。再创建数组b,包含数组a中各个数字在原数组中出现的次数。然后找出b的奇数元素就行。因为a,b长度相同,就可以得到要求的数字。
后来发现返回的数字只有一个。所以代码如下:

function findOdd(arr){
    let uniqueArr = [],
        odd = 0
    for(let i = 0;i<arr.length; i++){
        if(!uniqueArr.includes(arr[i]))
            uniqueArr.push(arr[i])
    }
    for(let i=0; i<uniqueArr.length;i++){
        let count = 0
        for(let j=0;j<arr.length;j++){
            if(arr[j] === uniqueArr[i])
                count++;
        }
        if(count%2){
            odd = i;
            break;
        }
    }
    return uniqueArr[odd]
}

codewar的最佳答案是:

const findOdd = (xs) => xs.reduce((a, b) => a ^ b);

运用XOR异或运算符的小婊子。。

相关文章

  • codewar1

    一道题目:Descending Order。要求给出一个数字,把它自身的数位上的数从大到小排序一遍。涉及数字,字符...

网友评论

      本文标题:codewar1

      本文链接:https://www.haomeiwen.com/subject/xccbyxtx.html