Skip to content

Latest commit

 

History

History
125 lines (94 loc) · 2.08 KB

50.Pow(x,-n).md

File metadata and controls

125 lines (94 loc) · 2.08 KB

50. Pow(x, n)


题目地址

https://leetcode.com/problems/powx-n/

题目描述

Implement pow(x, n), which calculates x raised to the power n (xn).

Example 1:

Input: 2.00000, 10
Output: 1024.00000
Example 2:

Input: 2.10000, 3
Output: 9.26100
Example 3:

Input: 2.00000, -2
Output: 0.25000
Explanation: 2-2 = 1/22 = 1/4 = 0.25
Note:

-100.0 < x < 100.0
n is a 32-bit signed integer, within the range [−231, 231 − 1]Given a string s, cut s into some substrings such that every substring is a palindrome.

Return the minimum cuts needed for a palindrome partitioning of s.

代码

Approach 1: Brute Force

Complexity Analysis

  • Time complexity: O(n)
  • Space complexity: O(1)
class Solution {
    public double myPow(double x, int n) {
    long N = n;
    if (N < 0) {
      x = 1 / x;
      N = -N;
    }

    double ans = 1;
    for (long i = 0; i < N; i++) {
      ans = ans * x;
    }
    return ans;
  }

}

Approach 2: Fast Power Algorithm Recursive

Complexity Analysis:

  • Time complexity: O(log n)
  • Space complexity: O(log n), For each computation, we need to store the result of x ^ {n / 2}
class Solution {
  public double myPow(double x, int n) {
    long N = n;
    if (N < 0) {
      x = 1 / x;
      N = -N;
    }

    return fastPow(x, N);
  }

  private double fastPow(double x, long n) {
    if (n == 0) {
      return 1.0;
    }
    double half = fastPow(x, n / 2);
    if (n % 2 == 0) {
      return half * half;
    } else {
      return half * half * x;
    }
  }

}

Approach 3: Fast Power Algorithm Iterative

Complexity Analysis

  • Time complexity: O(log n)
  • Space complexity: O(1)
class Solution {
  public double myPow(double x, int n) {
    long N = n;
    if (N < 0) {
      x = 1 / x;
      N = -N;
    }

    double ans = 1;
    double current_product = x;
    for (long i = N; i > 0; i /= 2) {
      if ((i % 2) == 1) {
        ans = ans * current_product;
      }
      current_product = current_product * current_product;
    }

    return ans;
  }
}