# LeetCode Solution, Easy, 1295. Find Numbers with Even Number of Digits

# [1295. Find Numbers with Even Number of Digits](https://leetcode.com/problems/find-numbers-with-even-number-of-digits/)

## 題目敘述

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`

**Hint 1**

How to compute the number of digits of a number ?

**Hint 2**

Divide the number by 10 again and again to get the number of digits.

### 題目翻譯

要在一個陣列 `nums` 中找出總共有幾個數值的位數是偶數的。

## 解法解析

這邊使用數字轉換字串的方是來解，轉換成字串後就可以用 `% 2` 來判斷是否為偶數。另外一種方式就是用雙重回圈的方式來 `/ 10` 計算總共有幾個位數。

### 解法範例

#### Go

```go
func findNumbers(nums []int) int {
	var count int = 0
	for _, num := range nums {
		if len(strconv.Itoa(num))%2 == 0 {
			count++
		}
	}
	return count
}
```

#### JavaScript

```javascript
/**
 * @param {number[]} nums
 * @return {number}
 */
var findNumbers = function(nums) {
    let count = 0;
    for (const num of nums) {
        count += ~String(num).length & 1
    }
    return count;
};
```

#### Kotlin

```kotlin
class Solution {
    fun findNumbers(nums: IntArray): Int {
        var count: Int = 0
        for (num in nums) {
            if (num.toString().length % 2 == 0) {
                count++
            }
        }
        return count
    }
}
```

#### PHP

```php
class Solution
{

    /**
     * @param Integer[] $nums
     * @return Integer
     */
    function findNumbers($nums)
    {
        $count = 0;
        foreach ($nums as $num) {
            if (strlen((string)$num) % 2 == 0) {
                $count++;
            }
        }
        return $count;
    }
}
```

#### Python

```python
class Solution:
    def findNumbers(self, nums: List[int]) -> int:
        return sum(~len(str(x)) & 1 for x in nums)
```

#### Rust

```rust
impl Solution {
    pub fn find_numbers(nums: Vec<i32>) -> i32 {
        return nums.iter()
            .filter(|num| num.to_string().len() %2 == 0)
            .count() as i32;
    }
}
```

#### Swift

```swift
class Solution {
    func findNumbers(_ nums: [Int]) -> Int {
        var count: Int = 0
        for num in nums {
            if String(num).count % 2 == 0 {
                count += 1
            }
        }
        return count
    }
}
```

