Practice Problem Link: Even Number of Digits | Practice Problem
Please make sure to try solving the problem yourself before looking at the editorial.
Problem Statement
Given an array of integers, find the elements which have an even number of digits.
Approach
We can just iterate over the elements in the array, and count the number of digits in each element of the array, and push the elements, which have an even number of digits in a list.
Counting the digits can be done by repeatedly dividing the number with 10.
Analysis
- Time Complexity : O(n log (size of largest number))
- Space Complexity : O(n)
Implementation
C++
int getDigitCount(int n) {
int count = 0;
if(n == 0) {
return 1;
}
while (n > 0) {
count++;
n /= 10;
}
return count;
}
vector<int> getEvenDigitNumbers(vector<int> &arr) {
vector<int> evenDigitList;
for (int x: arr) {
if(getDigitCount(x) % 2 == 0) {
evenDigitList.push_back(x);
}
}
return evenDigitList;
}Java
class Solution {
int getDigitCount(int n) {
int count = 0;
if(n == 0) {
return 1;
}
while (n > 0) {
count++;
n /= 10;
}
return count;
}
List<Integer> getEvenDigitNumbers (int[] arr) {
List<Integer> evenDigitList = new ArrayList<Integer>();
for (int i = 0; i < arr.length; i++) {
if(getDigitCount(arr[i]) % 2 == 0) {
evenDigitList.add(arr[i]);
}
}
return evenDigitList;
}
}