Գտեք թվերի զույգ թվով համարներ Leetcode լուծում


Դժվարության մակարդակ Հեշտ
Հաճախակի հարցնում են Quora
Դասավորություն

Այս խնդրում մեզ տրվում է ան դասավորություն դրական ամբողջ թվերի: Մենք պետք է գտնենք թվերի զույգ թվանշանների թվաքանակը:

Օրինակ

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

բացատրությունՄիայն 34-ը և 3434-ն են ամբողջ թվեր `զույգ թվանշաններով: Այսպիսով, մենք տպում ենք 2:

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

բացատրություն: Տրված զանգվածում չկա ամբողջ թվով զույգ թվանշաններ:

Մոտեցում

Այս խնդրի հիմքում ընկած է ամբողջ թվաքանակի թվերի հաշվելը: Եթե ​​մենք կարողանանք դա անել, ապա մենք կարող ենք կրկնել գործընթացը զանգվածի ամբողջ թվերի համար և հաշվել նույնիսկ ամբողջ թվերով թվերի ամբողջ թվերի քանակը: Երկուական ներկայացումներում մենք կարող ենք ճիշտ տեղափոխել տրված ամբողջ թիվ (կամ բաժանել այն 2-ի), մինչև այն դառնա զրո ՝ հաշվելու համարը bits դրա մեջ Նմանապես, թվանշանների հաշվարկի համար մենք կարող ենք շարունակ բաժանել ամբողջ թվով ըստ 10 եթե չդառնա 0, Այս մեթոդը ճիշտ է ցանկացած բազայի համար:

Գտեք թվերի զույգ թվով համարներ Leetcode լուծում

 

Ալգորիթմ

  1. Մենք ստեղծում ենք գործառույթ findNumbers () գտնել ցանկացած զանգվածում իրեն փոխանցված ամբողջ թվերի զույգ թվերի ամբողջ թիվը
  2. Բացի այդ, մենք ստեղծում ենք օգնող գործառույթ numberOfDigits () վերադարձնել իրեն փոխանցված ամբողջ թվում թվանշանների քանակը `
    1. initialize CNT = 0
    2. մինչ ամբողջ թվաքանակը n ավելի մեծ է, քան 0:
      1. ավելացում CNT, cnt ++
      2. բաժանել n by 10, n / = 10
    3. վերադարձնել CNT
  3. initialize արդյունք = 0 ՝ թվերի զույգ թվեր ունեցող ամբողջ թվերի քանակը պահելու համար
  4. Rayանգվածի յուրաքանչյուր տարրի համար.
    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

Թվերի թվերի զույգ թվով լուծումների գտնելու համարների բարդության վերլուծություն

Timeամանակի բարդություն

Timeամանակի բարդությունն այն է ՎՐԱ) որտեղ N = զանգվածի չափը, երբ մենք կատարում ենք զանգվածի մեկ անցում, և թվանշանների քանակը ստացվում է հաստատուն ժամանակում:

Տիեզերական բարդություն

Ո (1) քանի որ մենք օգտագործում ենք միայն մշտական ​​հիշողության տարածություն: