codewars題目記錄

2021-10-07 22:33:11 字數 3715 閱讀 7949

1、問題描述:傳入乙個二維陣列[[上車人數,下車人數],…],計算上車下車人數變動後車上剩下的總人數

//我的**

varnumber

=function

(busstops)

return num;

}//票數最高的**

const

number

=(busstops)

=> busstops.

reduce

((rem,

[on, off]

)=> rem + on - off,0)

;

注意點

1)第一種**是最容易想到的,最普遍的**,但第二種靈活運用陣列的迭代方法array.reduce(function),reduce()方法對陣列的每乙個元素執行函式,並返回乙個值,在第二種**中傳入引數:總數(初始值/先前返回值),每次上下車的人數,總數的初始值。

2)箭頭函式(匿名函式):

x => x * x

//相當於

function

(x)

箭頭函式有兩種格式,一種像上面的,只包含乙個表示式,連和return都省略掉了。還有一種可以包含多條語句,這時候就不能省略和return,當引數不止乙個時,用括號括起來。

如果要返回乙個物件,就要注意,如果是單表示式,這麼寫的話會報錯:

// syntaxerror:

x =>

因為和函式體的有語法衝突,所以要改為:

// ok:

x =>

()

2、問題描述:將乙個陣列中的0移到陣列末尾,其他元素保持順序

//我的**

varmovezeros

=function

(arr)

}return arr;

}//票數最高的**

varmovezeros

=function

(arr)).

concat

(arr.

filter

(function

(x)));

}

注意點:

1)第一種**有個地方很容易出錯,經常會將 len-- 這一步忘記,使**在後面會出現無限迴圈的情況,導致瀏覽器崩潰,第二種**巧妙地將陣列中為0和不為0的部分分割,並合併陣列!

2)array.filter()能篩選出陣列中符合條件的元素,array.concat()來連線陣列。

3、問題描述:根據不同人數的姓名陣列,返回對應陣列長度的字串

//我的**

function

likes

(names)

}//票數最高的**

function

likes

(names)

}//另一種**

function

likes

(names)

likes this'

,' and like this'

,', and like this'

,', and others like this'];

var idx = math.

min(names.length,4)

;return templates[idx]

.replace

(/|/g

,function

(val)

'? names.

shift()

: names.length;})

;}

注意點

1)第一種**宣告了太多的變數,使**看起來過於繁雜,當直接將宣告的變數相加時,即為第二種**,第三種**採用了模板字串,匹配模板字串中的和,如果為,則將字串陣列的首個元素移除並返回,若為,則返回剩餘元素的個數(此時前面的元素都被移除了)。

4、問題描述:給出乙個陣列,數值為0或1,將其連成的二進位制轉化為十進位制

//我的**

const

binaryarraytonumber

= arr =>

return num;};

//票數最高的**

const

binaryarraytonumber

= arr =>

parseint

(arr.

join(''

),2)

;

注意點:

1)第一種的**思想是對每位進行2的相應次方運算並結果相加,而第二種**將陣列轉換為字串並運用方法將二進位制轉為十進位制。

5、問題描述:根據乙個模板將數值陣列串成乙個字串

//我的**

function

createphonenumber

(numbers)

//票數最高的**

function

createphonenumber

(numbers)

//另一種**

function

createphonenumber

(numbers)

return format;

}//第四種**

function

createphonenumber

(numbers)

注意點:

1)第一種**簡潔明瞭,但當陣列元素多時,就會特別麻煩低效,第二種**將陣列轉化為字串,並通過str.substring()來提取字串中的字元,第三種**通過定義字串格式再進行逐個替換,第四種**通過$1,$2,$3來替代3個表示式,分別對應字串的前3個字元,中間3個字元和最後的所有字元進行替換。

6、問題描述:將字串中的字母分別用對應的數字代替,不區分大小寫,對字串非字母的部分忽略

//我的**

function

alphabetposition

(text)

else

} text = t.

join

(" ");

return text;

}//票數最高的**

function

alphabetposition

(text)

注意點:

1)第一種方法為常規解法,第二種方法通過將字串全轉換為大寫並將字母都轉換為對應數值再串成字串,通過陣列和字串的轉換和對應方法來解題。

總結:

1)在很多情況下可以用陣列的迭代方法來達到目的,使**更加簡短整潔,而不是凡事都用for迴圈

2)在有必要的時候宣告變數,但不要過多宣告變數,會使**過於繁雜。

3)在寫**過程中要對每乙個變數的值做到心裡有數,往往當變數的值改變時我們卻未曾注意,導致結果與預期不同。

4)熟練掌握陣列和字串的各種方法和兩者之間的轉換。

codewars題目解答Sum Arrays

1.題目描述 2.我解答 sum numbers function sum numbers return sum 3.別人的解答 sum numbers sum function numbers 0 reduce函式是歸併的方法,其接受兩個引數。第乙個引數是每一項上呼叫的函式,該函式接受四個引數 前...

其他題目記錄

當乙個數為2的n 次方時,整個二進位制數,只有本位是1 其他位為0,如果我們給這個數減一,那麼本位變為0 其他位全部變成1 我們可以通過 運算,如果為0即為2的n次方 def is2n self,n if n 0 return true res n n 1 return res 0或者直接通過 re...

PTA題目記錄

題目 已知兩個非降序鍊錶序列s1與s2,設計函式構造出s1與s2的交集新鍊錶s3。輸入格式 輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用 1表示序列的結尾 1不屬於這個序列 數字用空格間隔。輸出格式 在一行中輸出兩個輸入序列的交集序列,數字間用空格分開,結尾不能有多餘空格 若新鍊錶為...