【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.javascript

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

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

思路:数组

  1. 将数字转化为字符串浏览器

  2. 将字符串变成数组函数

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

  4. 将字符串转化为数字code

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) ~~ 按位非运算符

相关文章
相关标签/搜索