تحويل عدد صحيح إلى مجموع حل Leetcode عدد اثنين من الأعداد الصحيحة التي لا تحتوي على صفر


مستوى الصعوبة سهل
كثيرا ما يطلب في HRT
الرياضيات

طلبت منا مشكلة تحويل عدد صحيح إلى مجموع اثنين من عدد صحيحين لا صفري حل Leetcode تقسيم المعطى عدد صحيح. يجب أن نقسم العدد الصحيح إلى رقمين. هناك قيد مفروض على هذين العددين الصحيحين. يجب ألا يحتوي هذان العددان الصحيحان على الرقم 0. لفهم أفضل ، سنلقي نظرة على بعض الأمثلة.

تحويل عدد صحيح إلى مجموع حل Leetcode عدد اثنين من الأعداد الصحيحة التي لا تحتوي على صفر

n = 2
[1,1]

شرح: العددين الصحيحين في الإخراج هما 1 و 1. يمكن أن تكون الأعداد الصحيحة هي نفسها ولكن لا يجب أن تحتوي على الرقم 0. يتم استيفاء القيد في الإخراج. مجموع كل من الأعداد الصحيحة يساوي الإدخال أيضًا. وبالتالي فإن المخرجات صحيحة.

n = 1010
[11, 999]

Explanation: المخرج صحيح لأن مجموع كلا العددين يساوي 1010. كما أنهما لا يحتويان على أي رقم يساوي 0.

نهج لتحويل عدد صحيح إلى مجموع حل Leetcode عدد اثنين من الأعداد الصحيحة الخالية من الصفر

طلبت منا المشكلة تقسيم المدخلات المعطاة إلى عددين صحيحين. تم بالفعل ذكر الشرط الذي يجب الوفاء به في الوصف أعلاه. الشرط الأول هو أن مجموع الأعداد الصحيحة يجب أن يكون مساويًا لعدد صحيح معين. يجب ألا يحتوي الرقمان الصحيحان اللذان سيتم إرجاعهما كإخراج على أي رقم 0. لحل المشكلة ، نقوم بتشغيل حلقة على أول عدد صحيح يتراوح من 1 إلى n. يمكن استنتاج العدد الصحيح الثاني من العلاقة الأولى. ثم نتحقق مما إذا كان كلا العددين يستوفي الشرط الثاني.

للتحقق من الشرط الثاني ، نقوم بإنشاء وظيفة مخصصة تأخذ عددًا صحيحًا كمدخل. تقوم بإرجاع صواب أو خطأ بناءً على ما إذا كان العدد الصحيح يحتوي على 0 أم لا. للتحقق من أننا ببساطة نستمر في إزالة الأرقام واحدًا تلو الآخر من النهاية.

رمز

كود C ++ لتحويل عدد صحيح إلى مجموع حل Leetcode للأرقام الصحيحة التي لا تحتوي على صفر

#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

كود Java لتحويل عدد صحيح إلى مجموع حل Leetcode للأرقام الصحيحة التي لا تحتوي على صفر

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

تحليل التعقيد

تعقيد الوقت

O (NlogN) ، حيث N هو العدد الصحيح المعطى كمدخل. يحتوي السجل على أساس 10 لأن وظيفتنا التي تتحقق مما إذا كان العدد الصحيح يحتوي على 0 أم لا يعمل في وقت تسجيل الدخول.

تعقيد الفضاء

يا (1) ، نحن لا نخزن أي معلومات. وتستخدم الخوارزمية بأكملها عددًا ثابتًا من المتغيرات. وبالتالي فإن تعقيد الفضاء ثابت.