Претворете го цел број во збир од две решенија за лет код без нула интеграли


Ниво на тешкотија Лесно
Често прашувано во ХРТ
Математика

Проблемот Конвертирај интеграл во збир на два решенија за не-нула Leetcode од нас побара да го поделиме дадениот број. Дадениот цел број треба да го поделиме на два броја. Постои ограничување наметнато на овие два цели броја. Овие два интеграли не треба да ја содржат цифрата 0. За подобро разбирање, ќе разгледаме неколку примери.

Претворете го цел број во збир од две решенија за лет код без нула интеграли

n = 2
[1,1]

Објаснување: Двата интеграла во излезот се 1 и 1. Целиот број може да биде ист, но не смеат да имаат цифра 0. Ограничувањето е исполнето во излезот. Збирот на двата интеграла исто така е еднаков на влезот. Така излезот е точен.

n = 1010
[11, 999]

Објаснување: Излезот е точен затоа што збирот на двата интеграла е еднаков на 1010. И тие исто така немаат цифра еднаква на 0.

Пристап за конвертирање на цел број во збир на две решенија за лет код без нула интеграли

Проблемот побара од нас да го поделиме дадениот влез во два цел број. Условот што треба да се исполни е веќе наведен во описот погоре. Првиот услов е дека збирот на цели броеви мора да биде еднаков на дадениот цел број. Двата интеграли што ќе бидат вратени како излез не треба да содржат 0 цифри. За да го решиме проблемот, извршуваме јамка над првиот цел број што се движи од 1 до n. Вториот цел број може да се заклучи од првата релација. Потоа проверуваме дали и двата интеграла го исполнуваат вториот услов.

За проверка на вториот услов, создаваме сопствена функција што зема цел број како влез. Враќа точно или неточно во зависност од тоа дали дадениот цел број содржи 0 или не. За да проверите дали едноставно продолжуваме да ги отстрануваме цифрите една по една од крајот.

Код

C ++ код за претворање на цел број во збир на две решенија за лет код без нула интеграли

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

bool check(int n){
    while(n>0){
        if(n%10 == 0)
            return false;
        n/=10;
    }
    return true;
}

vector<int> getNoZeroIntegers(int n) {
    for(int i=1;i<n;i++){
        if(check(i) && check(n-i))
            return {i, n-i};
    }
    return {-1,-1};
}

int main(){
    int input = 1010;
    vector<int> output = getNoZeroIntegers(input);
    cout<<output[0]<<" "<<output[1];
}
11 999

Јава код за претворање на цел број во збир на два решенија за лет код без нула интеграли

import java.util.*;
import java.lang.*;
import java.io.*;

class Main
{
  private static boolean check(int n){
        while(n>0){
            if(n%10 == 0)return false;
            n/=10;
        }
        return true;
    }
    
    public static int[] getNoZeroIntegers(int n) {
        for(int i=1;i<n;i++){
            if(check(i) && check(n-i))
                return new int[]{i, n-i};
        }
        return new int[]{-1,-1};
    }
    
  public static void main (String[] args) throws java.lang.Exception{
    int input = 1010;
      int[] output = getNoZeroIntegers(input);
      System.out.print(output[0]+" "+output[1]);
  }
}
11 999

Анализа на сложеност

Временска комплексност

О (NlogN), каде што N е цел број даден како влез. Дневникот има основа 10 затоа што нашата функција проверува дали целиот број содржи 0 или не работи во logN време.

Комплексноста на просторот

О (1), ние не чуваме никакви информации. И целиот алгоритам користи постојан број на променливи. Така, комплексноста на просторот е постојана.