Plus Leetcode Solution


ລະດັບຄວາມຫຍຸ້ງຍາກ Easy
ຖາມເລື້ອຍໆໃນ Adobe Amazon ຈາກຫນາກແອບເປີ Capital One ເຟສບຸກ ກູໂກ Microsoft
Array

ບັນຫາບັນຫາ

ໃນບັນຫາ "Plus One" ພວກເຮົາໄດ້ຮັບການຈັດແຈງເຊິ່ງແຕ່ລະສ່ວນປະກອບໃນອາເລສະແດງຕົວເລກຂອງຕົວເລກ. ຂບວນຄົບຖ້ວນສົມບູນເປັນຕົວແທນຂອງຕົວເລກ. ດັດຊະນີ zeroth ເປັນຕົວແທນຂອງ ບໍລິສັດ MSB ຂອງຈໍານວນ. ພວກເຮົາສາມາດສົມມຸດວ່າບໍ່ມີສູນ ນຳ ໜ້າ ໃນ ຈຳ ນວນດັ່ງກ່າວ.

ໜ້າ ວຽກຂອງພວກເຮົາແມ່ນເພື່ອບວກ ໜຶ່ງ ໃນ ຈຳ ນວນທີ່ໃຫ້ໄວ້ແລ້ວສົ່ງຜົນໄດ້ຮັບໃນຮູບແບບຂບວນ.

ຍົກຕົວຢ່າງ

digits =[4,3,2,1]
[4,3,2,2]

ຄໍາອະທິບາຍ:

Plus Leetcode Solution

ເຊັ່ນດຽວກັນກັບໃນຕົວຢ່າງທີ່ລະບຸ, ອາເລທີ່ສະແດງເຖິງ 4321 ແລະ 4321 + 1 ກາຍເປັນ 4322. ດັ່ງນັ້ນພວກເຮົາໄດ້ສົ່ງຄືນ 4322.

ວິທີການ ສຳ ລັບ Plus One Leetcode Solution

ແນວຄວາມຄິດ ທຳ ອິດທີ່ເຂົ້າມາໃນຈິດໃຈຂອງທຸກໆຄົນແມ່ນການປ່ຽນແຖວທີ່ມອບໃຫ້ເປັນ ຈຳ ນວນ ໜຶ່ງ, ດຳ ເນີນການປະຕິບັດການເພີ່ມເຕີມ, ແລະຈາກນັ້ນສົ່ງຜົນໄດ້ຮັບໃນຮູບແບບຂບວນ

ແຕ່ແນວຄວາມຄິດນີ້ຈະລົ້ມເຫລວ ສຳ ລັບຂະ ໜາດ ຂະ ໜາດ ໃຫຍ່ຍ້ອນວ່າມັນບໍ່ ເໝາະ ສົມກັບປະເພດຂໍ້ມູນໃດໆ.

ດັ່ງນັ້ນ, ພວກເຮົາ ຈຳ ເປັນຕ້ອງປຸງແຕ່ງແຕ່ລະຕົວເລກແຕ່ລະອັນ.

  1. ເລີ່ມຕົ້ນຈາກ LSB ແລະຫຼັງຈາກນັ້ນປະມວນຜົນແຕ່ລະຕົວເລກຈົນຮອດ MSB.
  2. ຖ້າຕົວເລກປະຈຸບັນມີຂະ ໜາດ ນ້ອຍກວ່າ 9 ຫຼັງຈາກນັ້ນຕື່ມ ໜຶ່ງ ຕົວເລກໃນປະຈຸບັນແລະສົ່ງຄືນອາເລອື່ນທີ່ ກຳ ນົດສູນໃຫ້ກັບຕົວເລກປະຈຸບັນ.
  3. ຖ້າວ່າອົງປະກອບສຸດທ້າຍຖືກປຸງແຕ່ງແລະມັນກໍ່ເທົ່າກັບ 9, ມັນ ໝາຍ ຄວາມວ່າຕົວເລກທັງ ໝົດ ແມ່ນ 9. ສະນັ້ນ, ພວກເຮົາຈະເພີ່ມຂະ ໜາດ ຂອງຂບວນໂດຍ ໜຶ່ງ ແລະມອບ ໝາຍ 1 ໃຫ້ MSB
  4. ສົ່ງຄືນອາເລ

ການປະຕິບັດ

ລະຫັດ C ++ ສຳ ລັບ Plus One

#include <bits/stdc++.h> 
using namespace std; 
    vector<int> plusOne(vector<int>& digits) {
        int n=digits.size();
        for(int i=n-1;i>=0;i--)
        {
            if(digits[i]<9)
            {digits[i]++ ; return digits;} 
            else
                digits[i]=0;
        }
        vector<int>newnumber(n+1,0);
        newnumber[0]=1;
        return newnumber;
    }
int main() 
{ 
 vector<int> arr = {4,3,2,1}; 
  vector<int>ans= plusOne(arr); 
 for(int i=0;i<arr.size();i++)
 cout<<ans[i]<<" ";
 cout<<endl;
 return 0;
}
[4,3,2,2]

ລະຫັດ Java ສຳ ລັບ Plus One

import java.util.Arrays; 
public class Tutorialcup {
public static int[] plusOne(int[] digits) {
        
    int n = digits.length;
    for(int i=n-1; i>=0; i--) {
        if(digits[i] < 9) {
            digits[i]++; return digits;
        }
        digits[i] = 0;
    }
    
    int[] newNumber = new int [n+1];
    newNumber[0] = 1;
    return newNumber;
}
  public static void main(String[] args) {
        int [] arr = {4,3,2,1}; 
        int[]ans=plusOne(arr); 
        System.out.println(Arrays.toString(ans));
  }
}
[4,3,2,2]

ການວິເຄາະຄວາມສັບສົນຂອງວິທີແກ້ໄຂ ໜຶ່ງ ວິທີ Leetcode

ຄວາມສັບສົນເວລາ

ຄວາມສັບສົນຂອງເວລາຂອງລະຫັດຂ້າງເທິງແມ່ນ O (n) ເພາະວ່າພວກເຮົາ ກຳ ລັງຜ່ານການຂູດຕົວເລກພຽງແຕ່ຄັ້ງດຽວ. ນີ້ n ແມ່ນຄວາມຍາວຂອງອາເລເລກ.

ຄວາມສັບສົນໃນອະວະກາດ

ຄວາມສັບສົນໃນພື້ນທີ່ຂອງລະຫັດຂ້າງເທິງແມ່ນ O (1)  ໃນກໍລະນີທີ່ອາເລມີຢ່າງ ໜ້ອຍ ໜຶ່ງ ຕົວເລກນ້ອຍກວ່າ 9, ຖ້າບໍ່ດັ່ງນັ້ນ O (n).

ເອກະສານ