首页 > 其他分享 >leetcode 50. Pow(x, n)

leetcode 50. Pow(x, n)

时间:2024-11-12 21:08:43浏览次数:1  
标签:return int Pow 50 back double 1.0 leetcode mult

50. Pow(x, n)

要特别注意 n 的范围 ,如果 n = -2^31,使用int 是不可以直接 n = -n; 的

 

一、使用long

class Solution {
public:
    double myPow(double x, int n) {
        if(x == 0)  return 0;
        if(n == 0)  return 1;
        if(n == 1)  return x;

        long nTemp = n;
        if(nTemp < 0){
            x = 1.0/x;
            nTemp = -nTemp;
        }

        double res = 1.0;
        long count = 0;
        vector<double> mult;
        mult.push_back(x);
        //比如n = 35,那么两两平方的次数为log(35)向下取整
        //x^1  x^2  x^4  x^8  x^16  x^32   最多平方5次
        int log2 = (int)(log(nTemp)/log(2));
        for(int i = 0;i < log2;i++){
            double t = mult.back();
            mult.push_back(t*t);
        }
       
        int size = mult.size();
        for(int i = size-1;i >= 0;i--){
            if(count + pow(2,i) <= nTemp){
                res *= mult[i];
                count += pow(2,i);//count代表目前res=x^count
            }
        }
        return res;
    }
};        

二、不使用long

不使用long就要对边界条件单防了

class Solution {
public:
    double myPow(double x, int n) {
        if(x == 0)  return 0;
        if(n == 0)  return 1;
        if(n == 1)  return x;
        if(x == 1)  return 1;
        if(x == -1){
            if(n == INT_MIN)  return 1;
            if(n < 0)  n = -n;
            if(n%2==0)  return 1;
            else  return -1;
        }
        if(n == INT_MIN){
            if(abs(x)>1)  return 0;
            return (1.0/x)*myPow(1.0,INT_MAX);
        }

        if(n < 0){
            x = 1.0/x;
            n = -n;
        }

        double res = 1.0;
        int count = 0;
        vector<double> mult;
        mult.push_back(x);

        int log2 = (int)(log(n)/log(2));
        for(int i = 0;i < log2;i++){
            double t = mult.back();
            mult.push_back(t*t);
        }
       
        int size = mult.size();
        for(int i = size-1;i >= 0;i--){
            if(count + pow(2,i) <= n){
                res *= mult[i];
                count += pow(2,i);
            }
        }
        return res;

    }
};

 

222

 

标签:return,int,Pow,50,back,double,1.0,leetcode,mult
From: https://www.cnblogs.com/uacs2024/p/18542651

相关文章

  • CHC5028 Software Development
    CHC5028SoftwareDevelopmentwithC/C++CourseworkImportantDates Background“Textadventures”,nowcalled“interactivefiction”,wereamongthefirsttypeofcomputergameeverproduced.Thesegameshavenographics;theplayerreadsthestoryof......
  • Leetcode 148. 排序链表
    给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。经典的分治算法应用,通过归并进行排序,需要用到一个与原数组相同长度的数组归(分割)思想如上图所示,代码实现通过快慢指针来寻找链表的中点来分割指针varspilitList=function(head){if(head===......
  • LeetCode 836[矩形重叠]
    题目链接LeetCode836[矩形重叠]详情实例提示题解思路无重叠的四种情况:第二个矩形的右边边如果在第一个矩形的左边边的左边或重叠第二个矩形的左边边如果在第一个矩形的右边边的右边或重叠第二个矩形的上边边如果在第一个矩形的下边边的下边或重叠第二个矩形的下......
  • leetcode 29. 两数相除
    29.两数相除一、使用long类型classSolution{public:longdivide2(longdividend,longdivisor){if(dividend<0&&divisor<0)returndivide2(-dividend,-divisor);elseif(dividend<0&&divisor>0)return-div......
  • leetcode 4. 寻找两个正序数组的中位数 困难 未完全解决
    leetcode4.寻找两个正序数组的中位数一、使用额外空间,类似归并排序的做法classSolution{public:doublefindMedianSortedArrays(vector<int>&nums1,vector<int>&nums2){intm=nums1.size();intn=nums2.size();inttemp[(m+n)/2+1];//......
  • PowerShell 重命名文件夹及删除空文件夹
    数据来源$urldata中的倒数第2列(子文件夹名称列)包含/、\等特殊字符某个文件夹重命名脚本foreach($iin0..100){#提取路径部分$basePath=($urldata[$i].split("`t")[-1]).trim()$subPath=($urldata[$i].split("`t")[-2].replace('"','')......
  • 代码随想录算法训练营第十一天|LeetCode150.逆波兰表达式求值、239.滑动窗口最大值、3
    前言打卡代码随想录算法训练营第49期第十一天 φ(゜▽゜*)♪首先十分推荐学算法的同学可以先了解一下代码随想录,可以在B站卡哥B站账号、代码随想录官方网站代码随想录了解,卡哥清晰易懂的算法教学让我直接果断关注,也十分有缘和第49期的训练营大家庭一起进步。今日题目在学......
  • 250V共补电容器怎么选?
    在许多工业和电力系统的应用中,电容器组合闸(或称为电力电容器)被广泛用于提高系统的功率因数和稳定性。然而,实际操作中,电容器组合闸后的电压过高现象却屡见不鲜,这引起了工程师和技术人员的广泛关注。本文将详细探讨电容器组合闸后电压过高的原因,并提出对应的解决方案和预防措施,以......
  • Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行信号时域仿真操作指导(
    SigritySPEED2000PowerGroundNoiseSimulation模式如何进行信号时域仿真操作指导(二)-三个IBIS模型SigritySPEED2000PowerGroundNoiseSimulation模式如何进行信号时域仿真操作指导(一)-单个IBIS模型介绍了在单个IBIS模型的激励下,发送和接收端的电压时域波形,当三个IB......
  • 库卡机器人KR500维修保养
    随着现代工业自动化,KUKA库卡机器人以其卓越的性能、灵活的操作和高效的产出而备受赞誉。然而,为了确保机器人的持续稳定运行和延长使用寿命,应联系子锐机器人维修对库卡机器人保养至关重要。一、库卡机器人KR500日常检查与维护外观检查:每天工作前,对机器人进行外观检查,确保无损坏、......