寶寶也能看懂的 leetcode 周賽 - 168 - 1

寶寶也能看懂的 leetcode 周賽 - 168 - 1

Hi 你們好,我是張小豬。歡迎來到『寶寶也能看懂』系列之 leetcode 題解。javascript

這裏是第 168 期的第 1 題,也是題目列表中的第 1295 題 -- 『Find Numbers with Even Number of Digits』java

題目描述

Given an array nums of integers, return how many of them contain an even number of digits.git

Example 1:github

Input: nums = [12,345,2,6,7896]
Output: 2
Explanation:
12 contains 2 digits (even number of digits).
345 contains 3 digits (odd number of digits).
2 contains 1 digit (odd number of digits).
6 contains 1 digit (odd number of digits).
7896 contains 4 digits (even number of digits).
Therefore only 12 and 7896 contain an even number of digits.

Example 2:shell

Input: nums = [555,901,482,1771]
Output: 1
Explanation:
Only 1771 contains an even number of digits.

Constraints:數組

1 <= nums.length <= 500
1 <= nums[i] <= 10^5

官方難度

EASY微信

解決思路

題目內容很簡單,就是返回數組中長度爲偶數的數字的數量。順着思路,很容易就能想到最直接方案,也就是對於數組裏的每個數字,獲取它的長度,而後作判斷便可。post

直接方案

基於以上思路,那麼接下來問題即是如何獲取長度呢?spa

一種方式,想到長度可能會聯想到字符串,而 JS 中數字轉化爲字符串很容易。因而咱們獲得第一種實現代碼。code

const findNumbers = nums => {
  let ret = 0;
  for (let i = 0; i < nums.length; ++i) {
    (nums[i].toString().length & 1) === 0 && ++ret;
  }
  return ret;
};

另外一種方式,咱們也能夠直接基於數字計算獲得對應的長度。這裏用到了幾個簡單的位運算來作處理,固然也能夠不用,替換爲相應的其餘方式便可。

const findNumbers = nums => {
  let ret = 0;
  for (let i = 0; i < nums.length; ++i) {
    let len = 0;
    for (let val = nums[i]; val > 0; ++len) {
      val = val / 10 >> 0;
    }
    (len & 1) === 0 && ++ret;
  }
  return ret;
};

換個思路

作到這裏其實原本也差很少了,正打算收尾的時候,忽然注意到限制條件裏給出的每一個數字的取值範圍 [1, 10^5]
乍一看好像挺大,然而咱們這裏是要長度爲偶數的數字,其實在範圍內的也就兩段 [10, 99][1000, 9999]。這下好了,也不用取長度了,直接判斷範圍便可。

const findNumbers = nums => {
  let ret = 0;
  for (let i = 0; i < nums.length; ++i) {
    const val = nums[i];
    ((val > 9 && val < 100) || (val > 999 && val < 10000)) && ++ret;
  }
  return ret;
};

打完收工,做爲周賽的第一題,拿回保底的分。

相關連接

個人微信公衆號

相關文章
相關標籤/搜索