Ададҳоро бо шумораи ҷуфт рақамҳои ҳалли Leetcode ёбед


Сатҳи душворӣ осон
Аксар вақт пурсида мешавад Quora
тартиботи ҳарбӣ

Дар ин масъала, ба мо як асал ададҳои мусбат. Мо бояд шумораи рақамҳоро бо шумораи ҷуфтҳои рақамҳо пайдо кунем.

мисол

Array = {123 , 34 , 3434 , 121 , 100}
2

Шарҳ: Танҳо 34 ва 3434 ададҳои бутуни дорои рақами ҷуфт мебошанд. Ҳамин тавр, мо 2 чоп мекунем.

Array = {1 , 111 , 11111 , 12345}
0

Шарҳ: Дар массиви додашуда ягон адади бутун бо шумораи ҷуфт рақам вуҷуд надорад.

усул

Мазмуни ин масъала ҳисоб кардани рақамҳо дар адади бутун мебошад. Агар мо ин корро карда тавонем, пас мо метавонем равандро барои ҳар як бутуни массив такрор кунем ва шумораи бутунҳои дорои рақами ҷуфтро ҳисоб кунем. Дар нишондиҳандаҳои дуӣ, мо метавонем як адади додашударо дуруст иваз кунем (ё онро ба 2 тақсим кунем) то он даме ки сифр шавад, то шумори шумори каме дар он. Ба ҳамин монанд, барои ҳисоб кардани рақамҳо мо метавонем як ададро ба тақсим кунем 10 агар он нашавад 0. Ин усул барои ҳама гуна пойгоҳҳо дуруст аст.

Ададҳоро бо шумораи ҷуфт рақамҳои ҳалли Leetcode ёбед

 

Алгоритм

  1. Мо функсия эҷод мекунем findNumbers () барои ёфтани ҳисоби бутунҳои дорои шумораи ҷуфт рақамҳо дар ҳама гуна массиве, ки ба он гузаштааст
  2. Инчунин, мо вазифаи ёрирасонро эҷод мекунем numberOfDigits () барои баргардонидани шумораи рақамҳои бутуни ба он гузаронидашуда, ба тариқи зерин:
    1. пешниҳод кардан cnt = 0
    2. дар ҳоле ки адади бутун, n аз 0 бузургтар аст:
      1. афзоиш cnt, cnt ++
      2. ҷудо кунед n by 10, n / = 10
    3. бозгашт cnt
  3. Оғоз натиҷа = 0 барои нигоҳ доштани ҳисоби бутунҳо, ки шумораи ҷуфт рақамҳо доранд
  4. Барои ҳар як унсури массив:
    1. мо шумораи рақамҳоро бо истифода аз он ҷустуҷӯ мекунем numberOfDigits () функсия
    2. Агар шумораи рақамҳои бадастомада баробар бошад:
      1. Натиҷаи афзоиш, натиҷа ++
  5. Натиҷаи баргаштан

Татбиқи Ададҳо бо шумораи ҷуфт рақамҳо Ҳалли Leetcode

Барномаи C ++

#include <bits/stdc++.h>
using namespace std;

int numberOfDigits(int n)
{
    int cnt = 0;
    while(n > 0)
    {
        n /= 10;
        cnt++;
    }
    return cnt;
}

int findNumbers(vector <int> &a)
{
    int result = 0;
    for(int &i : a)
        if(numberOfDigits(i) % 2 == 0)
            result++;

    return result;
}

int main()
{
    vector <int> a = {123 , 34 , 3434 , 121 , 100};
    cout << findNumbers(a) << '\n';
    return 0;
}

Барномаи Java

class find_numbers
{
    public static void main(String args[])
    {
        int[] a = {123 , 34 , 3434 , 121 , 100};
        System.out.println(findNumbers(a));
    }

    static int numberOfDigits(int n)
    {
        int cnt = 0;
        while(n > 0)
        {
            n /= 10;
            cnt++;
        }
        return cnt;
    }

    static int findNumbers(int[] a)
    {
        int result = 0;
        for(int i = 0 ; i < a.length ; i++)
            if(numberOfDigits(a[i]) % 2 == 0)
                result++;

        return result;
    }
}
2

Таҳлили мураккаби рақамҳои ёфтан бо шумораи ҷуфт рақамҳо Ҳалли Leetcode

Мураккабии вақт

Мураккабии вақт аст О (Н) ки дар он N = андозаи массив ҳангоми иҷрои як қатор массив ва миқдори рақамҳо дар вақти доимӣ гирифта мешавад.

Мураккабии фазо

О (1) чунон ки мо танҳо фазои хотираи доимиро истифода мебарем.