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

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