Pow (x, n) Leetcode መፍትሔ


የችግር ደረጃ መካከለኛ
ውስጥ በተደጋጋሚ ተጠየቀ የ Adobe አማዞን ፓም asana ብሉምበርግ eBay ፌስቡክ ጎልድማን ሳክስ google LinkedIn የ Microsoft በ Oracle የ PayPal በ Uber VMware የዎልማርት ላብራቶሪዎች
የሁለትዮሽ ፍለጋ ሒሳብ

ችግሩ “Pow (x, n) Leetcode Solution” የሚለው ሁለት ቁጥሮች እንደተሰጠዎት ይናገራል ፣ አንደኛው ተንሳፋፊ ነጥብ ቁጥር ሌላ ኢንቲጀር ነው ፡፡ ኢንቲጀርው ሰፋፊውን የሚያመለክት ሲሆን መሠረቱ ተንሳፋፊ-ነጥብ ቁጥር ነው። ከመሠረቱ በላይ ያለውን ገላጭ ከገመገምን በኋላ እሴቱን እንድናገኝ ተነግሮናል ፡፡ መሰረቱ አሉታዊ ፣ አዎንታዊ ወይም ዜሮ ሊሆን ይችላል ፡፡ ኤክስፖርቱ በኢንቲጀር ክልል መካከል በማንኛውም ቦታ ሊተኛ ይችላል ፡፡ በውጤቱም ላይ ገደብ ተሰጥቶናል ፡፡ ውጤቱ ከ -10000 እስከ +10000 ባለው ጊዜ ውስጥ በየትኛውም ቦታ ይሆናል። ስለዚህ ጥቂት ምሳሌዎችን እንመልከት ፡፡

Pow (x, n) Leetcode መፍትሔ

ለምሳሌ

Base: 2
Exponent: 10
Answer: 1024

ማብራሪያ-ለ 2 ^ 10 = 104 ዋጋ ስለሆነ ፣ ስለሆነም መልሱ። ይህ ደግሞ በ 2 10 ጊዜ ተደጋጋሚ ብዜት ማረጋገጥ ይቻላል ፡፡

Base: 2
Exponent: -10
Answer: 0.00098

ማብራሪያ-የአክስዮን እሴት እንዲሁ ወደ -10 ስለተለወጠ መልሱ ተቀይሯል ፡፡

የጭካኔ ኃይል አቀራረብ

ለችግሩ የጭካኔ ኃይል አቀራረብ Pow (x, n) Leetcode Solution በጣም ቀላል ነው ፡፡ ሰፋፊዎችን የመገምገም አሠራርን ብቻ ማስመሰል ያስፈልገናል ፡፡ የመሠረት አክሲዮን ቁጥርን በማባዛት አንድ አክራሪ በቀላሉ ሊገመገም ይችላል። ስለዚህ ፣ በማንኛውም የምንወዳቸው የፕሮግራም ቋንቋዎች ውስጥ loop በመጠቀም ይህንን በቀላሉ ማስመሰል እንችላለን ፡፡ አንድ ልብ ሊባል የሚገባው ነገር የማዕዘን ጉዳዮች ናቸው ፡፡ መቼ አውጪው ከከፍተኛው የ ‹ኢንቲጀር› እሴት ወይም አነስተኛ እሴት ጋር እኩል ይሆናል ኢንቲጀር. እንደ ኢንቲጀር አነስተኛ እሴት ገላጭ ሲኖረን ፣ መልሱ ወይ 1 ወይም 0. ሊሆን ይችላል ፣ መሠረቱ 1 ወይም -1 ከሆነ ፣ ኤክስፔር እንደ ኢንቲጀር አነስተኛ እሴት ያለው ከሆነ ፣ መልስ 1 ይሆናል 0 አለበለዚያ 1. በተመሳሳይ እኛ 10000 ብቻ ሊኖረን ይችላል ፡፡ በውጤቱ ላይ ያለው ውስንነት ከኤክስፐርተር ጋር እንደ ከፍተኛ ቁጥር (ኢንቲጀር) ከሆነ ከ XNUMX በታች ነው።

ለፓድ ኮድ (x, n) Leetcode Solution

ሲ ++ ኮድ

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

double myPow(double x, int n) {
    if (n == INT_MAX) return x;
    else if (n == INT_MIN) return (x == 1 || x == -1) ? 1 : 0;
    if(n<0) x=1/x, n*=-1;
    double ans = 1;
    for(int i=0;i<n;i++)
        ans = ans*x;
    return ans;
}

int main(){
    cout<<myPow(2, 10);
}
1024

የጃቫ ኮድ

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

class Solution {
    public static double myPow(double x, int n) {
        if (n == Integer.MAX_VALUE) return x;
        else if (n == Integer.MIN_VALUE) return (x == 1 || x == -1) ? 1 : 0;
        if(n<0) {
            x=1/x;
            n*=-1;
        }
        double ans = 1;
        for(int i=0;i<n;i++)
            ans = ans*x;
        return ans;
    }
    
    public static void main(String[] args){
    	System.out.println(myPow(2, 10));
    }
};
1024.0

ውስብስብነት ትንተና

የጊዜ ውስብስብነት

ኦ (ኤን) ፣ ምክንያቱም የመሠረቱን ገላጭ ጊዜ እስክናባዛ ድረስ እንዞራለን ፡፡ ስለዚህ የጊዜ ውስብስብነት መስመራዊ ነው።

የቦታ ውስብስብነት

ኦ (1) ፣ ምክንያቱም መልሱን ብቻ ማከማቸት አለብን ፣ አንድ ነጠላ ተለዋዋጭ እንጠቀማለን። ስለሆነም የቦታ ውስብስብነት ቋሚ ነው።

ለፓው የተመቻቸ አቀራረብ (x, n) Leetcode Solution

የተመቻቸ አካሄድ ፈጣን ሞጁሎ ኤክስቴንሽን ስልተ ቀመሮችን ይጠቀማል ፡፡ በፍጥነት ሞጁሎ ማራዘምን በድጋሜም ሆነ በተከታታይ ተግባራዊ ማድረግ እንችላለን ፡፡ በፍጥነት ሞዱሎ ኤክስፖዚሽን ውስጥ መሠረቱን በ 2 ኃይል እናባዛለን ፡፡ በዚህ መሠረት መሰረቱን በራሱ ማባዛችንን እንቀጥላለን ማለታችን ነው ፡፡ ስለዚህ ፣ በመጀመርያው እርምጃ መሠረቱ ከራሱ ካሬ ይሆናል ፡፡ በ “ለ” የተጠቆመውን መሠረት እንበል ፡፡ ስለዚህ በመጀመርያው ደረጃ ለ ^ 2 ይሆናል ፣ በሚቀጥለው ደረጃ ደግሞ b ^ 4 ፣ ከዚያ b ^ 8 ፣ ከዚያ ቢ ^ 16 ፣ ወዘተ ይሆናል ፡፡ አሁን በወራፊው ውስጥ ካሉት ጋር የሚዛመዱትን የመሠረት ኃይሎችን ብቻ እናባዛለን ፡፡ ስለዚህ ፣ አክራሪውን በሁለትዮሽ ቅርጸት ይለውጡ እና እንደ አክሲዮን ሁለትዮሽ ቅርጸት መሰረቶቹን ማባዛቱን ይቀጥሉ። ለምሳሌ, 3 ^ 6 ን ያስሉ. እዚህ መሠረት = 3 ፣ ገላጭ = 6. በሁለትዮሽ ቅርጸት 6 ን መለወጥ 110 ያደርገዋል 1. አሁን በመጀመርያው ደረጃ አከፋፋዩ እንዳለው እንፈትሻለን 6. 0 እንደ መጀመሪያው ዝቅተኛው ጉልት ስለሆነ 2 እናውቀዋለን ፡፡ b ^ 6 ይሆናል ፡፡ አሁን ፣ 1 2 ን እንደ 2 ኛ ዝቅተኛው ጉልህ ቢት አለው ፣ ስለሆነም ለመልስ ^ 2 እናባዛለን ፡፡ አሁን መልሱ ከ b ^ 4 ጋር እኩል ነው ፡፡ ከዚያ መሠረቱ ለ ^ 6 ይሆናል ፡፡ 1 3 ን እንደ 4 ኛ ዝቅተኛው ዝቅተኛ መጠን ያለው ስለሆነ ፣ እኛ ለመልስ ^ 2 እናባዛለን ፡፡ መልሱ አሁን b ^ 4 * b ^ 6 = b ^ XNUMX ይሆናል ፡፡ እናም እኛ የምንፈልገው ነበር ፡፡ አልጎሪዝም እንዴት እንደሚተገበር ለማግኘት ከዚህ በታች ያለውን ትግበራ ያረጋግጡ ፡፡

ለ Pow (x, n) Leetcode Solution የተመቻቸ ኮድ

ሲ ++ ኮድ

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

double myPow(double x, int n) {
    if (n == INT_MAX) return x;
    else if (n == INT_MIN) return (x == 1 || x == -1) ? 1 : 0;
    if(n<0) x=1/x, n*=-1;
    double ans = 1;
    while(n>0){
        if(n&1)
            ans *= x;
        x = x*x;
        n = n>>1;
    }
    return ans;
}

int main(){
    cout<<myPow(2, 10);
}
1024

የጃቫ ኮድ

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

class Solution {
    public static double myPow(double x, int n) {
        if (n == Integer.MAX_VALUE) return x;
        else if (n == Integer.MIN_VALUE) return (x == 1 || x == -1) ? 1 : 0;
        if(n<0) {
            x=1/x;
            n*=-1;
        }
        double ans = 1;
        while (n>0){
            if(n%2 == 1) ans = ans*x;
            x = x*x;
            n = n>>1;
        }
        return ans;
    }
    
    public static void main(String[] args){
    	System.out.println(myPow(2, 10));
    }
};
1024

ውስብስብነት ትንተና

የጊዜ ውስብስብነት

ኦ (logN) ፣ ምክንያቱም ቤዝ ቤዝ ላይ ለመቁጠር ሎጋሪዝም ጊዜ የሚወስድ ፈጣን ሞዱሎ ኤክስፖዚሽን ተጠቅመናል ፡፡ እኛ እንዲሁ ጊዜያዊ ውስብስብነትን በተጨባጭ ማወቅ እንችላለን ፡፡ እኛ ኤክስፐርቱን እስከ 0 ድረስ ስላካፈልነው ስለዚህ የሚፈለገው ጊዜ ኤን አውራጅ በሆነበት በ logN ላይ የተመሠረተ ነው ፡፡

የቦታ ውስብስብነት

ኦ (1) ፣ መልሱን ለማከማቸት አንድ ነጠላ ተለዋዋጭ ስለተጠቀምን የቦታ ውስብስብነት ቋሚ ነው።