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

相關文章
相關標籤/搜索