【7 kyu】Descending Order

原题目

Your task is to make a function that can take any non-negative integer as a argument and return it with it's digits in descending order. Essentially, rearrange the digits to create the highest possible number.

Examples:
Input: 21445 Output: 54421
Input: 145263 Output: 654321
Input: 1254859723 Output: 9875543221

题目:将一个正整数里的数字按照降序排列。

思路:

  1. 将数字转化为字符串

  2. 将字符串变成数组

  3. 将数组中的元素按照降序排列,然后拼接成字符串

  4. 将字符串转化为数字

My Solution:

function descendingOrder(n){
  var str = n.toString();
  str = str.split('').sort(function(x, y) {
    return y-x
  });
  return parseInt(str.join(''))
}

Clever Solution

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

对比

1. 将数字转化为字符串

(1) .toString([radix]) 可以将除了 nullundefined的对象都转换为字符串

  • radix: 可选参数,表示进制

var a;

a.toString();
// Uncaught TypeError: Cannot read property 'toString' of undefined

a = null;
a.toString();
// Uncaught TypeError: Cannot read property 'toString' of null

a = 10;
a.toString(2);    // "1010"

a = {name: 'Alice', age: '1'};
a.toString();    // "[object Object]"

(2) String() 可以将 nullundefined 转换为字符串,但是没法转进制字符串

var b;
String(b);    // "undefined"

b = null;
String(b);    // "null"

b = {name: 'Alice', age: '1'};
String(b);    // "[object Object]"
2. 数组降序

(1) arrayObject.sort([sortby]) 传入比较函数sortby,直接降序排列

当参数 sortby 不存在时是按照字符编码的顺序进行排序。

若提供比较函数 function(x, y){ return 返回值; }

  • 返回值 <= 0: x, y 不变

  • 返回值 > 0: x, y 交换位置

(2) sort()升序排列后,再利用reverse()反序

3. 将字符串转换为Number

(1) parseInt(string, [radix])

  • radix:可选参数,表示进制。在不指定radix的情况下:

    • 如果字符串 string 以"0x"或者"0X"开头, 则基数是16 (16进制).

    • 如果字符串 string 以"0"开头, 基数是8(八进制)或者10(十进制),那么具体是哪个基数由实现环境决定。ECMAScript 5 规定使用10,但是并不是所有的浏览器都遵循这个规定。因此,永远都要明确给出radix参数的值。

    • 如果字符串 string 以其它任何值开头,则基数是10 (十进制)。

    • 如果第一个字符不能被转换成数字,parseInt返回NaN。

(2) Number(str): 若传入的字符串中含有非数字字符,将返回NaN

(3) + 运算符,强制类型转换

除此之外,将String转换为Number还可使用

(4) 运算符 -*/ 都可以进行强制类型转换

(5) ~~ 按位非运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值