0
0

More than 3 years have passed since last update.

Find Numbers with Even Number of Digits 〜leetcode〜

Posted at

〜問題文〜

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


Example 1:

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:

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

引用元: https://leetcode.com/problems/find-numbers-with-even-number-of-digits/
  

〜1時間かけて私が作った回答の残骸😇〜


# @param {Integer[]} nums
# @return {Integer}
def find_numbers(nums)
    nums.each do |i|
        nums_count = nums.length
        num_count = i.length 
        array = []
        (0..nums_count).each do |n|
            while 0 != (num_count-1) do
              arreay [num_count] 


            end
             array =  
        end
    end
  end
  return #偶数の数
end

# nums = [555,901,482,1771]
# find_numbers(nums)



# 555 => 5,5,5 =>  5%2 != 0(奇数) ・ 5%2 == 0(偶数)

# 数字の配列nums
# 偶数の数字の数を返しなさい
#  nums<i<
# 10**(num_count-1)

今できる精一杯のコーディングでした。悔いはありません。。。。😇

他の人の回答例(正解ではない)

さっき気づいたんですけど、leetcode の problem / discussって 「正 解」 じゃないんですね 笑
高確率でエラーが起こります 笑
なので他の人の回答を見て参考にしつつ、改善案と気づきを書いていくことにします。

def find_numbers(nums)
  keepers = []
  nums.each do |n|
      if n.to_s.length % 2 == 0
          keepers.push(n)
      end
  end
   return keepers.count
end

回答例引用元(一部改変):
https://leetcode.com/problems/find-numbers-with-even-number-of-digits/discuss/499246/Simple-Ruby-solution

以下、上記回答の分解分析

1. メソッドの定義


def find_numbers(nums)

         〜省略〜

end

「find_numbers」というメソッドを定義。
仮引数=「nums」と定義する。

2. メソッドの処理


    keepers = []

空の配列「keepers」を定義する。



    nums.each do |n|

        〜省略〜

    end

 配列numsの要素数ごとに繰り返し処理をする。
 ブロック変数を「n」として、繰り替えじ処理を行う。



      if n.to_s.length % 2 == 0
          keepers.push(n)
      end

【if】
もし、n.to_s.length % 2 == 0 (数字の文字数が偶数) であったら、配列 「target」 に 「x(=nums[indx])」を加算していく。

【else】
そうでなければ何もしない(処理なし)。

↑きっとここがおかしいポイント!

👌本来は、分解した一桁の整数が偶数の物をカウントしなければならない。
(例:243 → [2,4,3]→偶数は2つ)

🙈しかし、本回答では桁数が偶数かどうか判別しているコードになっている。
(例:243 → [2,4,3]→桁数は「偶数じゃない」)



   return keepers.count

keepers.countでkeepersの文字数を返す。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0