แปลงจำนวนเต็มเป็นผลรวมของโซลูชัน Leetcode จำนวนเต็มไม่มีศูนย์สองตัว  


ระดับความยาก สะดวกสบาย
ถามบ่อยใน HRT
อัลกอริทึม การเข้ารหัส สัมภาษณ์ สัมภาษณ์เตรียม LeetCode LeetCodeSolutions คณิตศาสตร์

ปัญหาแปลงจำนวนเต็มเป็นผลรวมของสองจำนวนเต็ม No-Zero Leetcode Solution ขอให้เราแบ่งพาร์ติชันที่กำหนด จำนวนเต็ม. เราควรแบ่งจำนวนเต็มให้เป็นสองจำนวน มีข้อ จำกัด ที่กำหนดไว้สำหรับจำนวนเต็มสองจำนวนนี้ จำนวนเต็มทั้งสองนี้ไม่ควรมีเลข 0 เพื่อความเข้าใจที่ดีขึ้นเราจะดูตัวอย่างบางส่วน

แปลงจำนวนเต็มเป็นผลรวมของโซลูชัน Leetcode จำนวนเต็มไม่มีศูนย์สองตัว

n = 2
[1,1]

คำอธิบาย: จำนวนเต็มสองจำนวนในเอาต์พุตคือ 1 และ 1 จำนวนเต็มสามารถเหมือนกันได้ แต่ต้องไม่มีหลัก 0 พบข้อ จำกัด ในเอาต์พุต ผลรวมของจำนวนเต็มทั้งสองจะเท่ากับอินพุตด้วย ดังนั้นผลลัพธ์จึงถูกต้อง

n = 1010
[11, 999]

คำอธิบาย: ผลลัพธ์ถูกต้องเนื่องจากผลรวมของจำนวนเต็มทั้งสองมีค่าเท่ากับ 1010 และไม่มีตัวเลขใด ๆ เท่ากับ 0

แนวทางในการแปลงจำนวนเต็มให้เป็นผลรวมของสองจำนวนเต็ม Leetcode Solution ที่ไม่มีศูนย์  

ปัญหาขอให้เราแบ่งข้อมูลที่ป้อนให้เป็นจำนวนเต็มสองจำนวน เงื่อนไขที่ควรเป็นไปตามนั้นได้ระบุไว้แล้วในคำอธิบายด้านบน เงื่อนไขแรกคือผลรวมของจำนวนเต็มต้องเท่ากับจำนวนเต็มที่กำหนด จำนวนเต็มสองตัวที่จะส่งคืนเนื่องจากเอาต์พุตไม่ควรมี 0 หลัก ในการแก้ปัญหาเราใช้การวนซ้ำบนจำนวนเต็มแรกที่มีค่าตั้งแต่ 1 ถึง n จำนวนเต็มที่สองสามารถอนุมานได้จากความสัมพันธ์แรก จากนั้นเราตรวจสอบว่าจำนวนเต็มทั้งสองเป็นไปตามเงื่อนไขที่สองหรือไม่

ดูสิ่งนี้ด้วย
Swaps ขั้นต่ำเพื่อสร้าง Strings Equal Leetcode Solution

สำหรับการตรวจสอบเงื่อนไขที่สองเราสร้างฟังก์ชันแบบกำหนดเองที่รับจำนวนเต็มเป็นอินพุต จะคืนค่าจริงหรือเท็จขึ้นอยู่กับว่าจำนวนเต็มที่ระบุมี 0 หรือไม่ สำหรับการตรวจสอบว่าเราลบตัวเลขออกทีละหลักจากจุดสิ้นสุด

รหัส  

โค้ด C ++ เพื่อแปลงจำนวนเต็มให้เป็นผลรวมของ Leetcode จำนวนเต็ม No-Zero สองตัว

#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 Solution จำนวนเต็ม No-Zero สองตัว

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 หรือไม่ทำงานในเวลา logN

ความซับซ้อนของอวกาศ

O (1), เราไม่เก็บข้อมูลใด ๆ และอัลกอริทึมทั้งหมดใช้ตัวแปรจำนวนคงที่ ดังนั้นความซับซ้อนของพื้นที่จึงคงที่