zoukankan      html  css  js  c++  java
  • 372. Super Pow

    问题:

    求a^b%base的值。

    a为int型数

    b为int数组,例如[1,2,3,4]代表:b=1234

    base=1337。

    Example 1:
    Input: a = 2, b = [3]
    Output: 8
    
    Example 2:
    Input: a = 2, b = [1,0]
    Output: 1024
    
    Example 3:
    Input: a = 1, b = [4,3,3,8,5,2]
    Output: 1
    
    Example 4:
    Input: a = 2147483647, b = [2,0,0]
    Output: 1198
    
    Constraints:
    1 <= a <= 2^31 - 1
    1 <= b.length <= 2000
    0 <= b[i] <= 9
    b doesn't contain leading zeros.
    

      

    解法:math,DFS,Backtracking

    参考:labubadong

    首先,基本DFS规律为:

    • part1=a^4
    • part2=(a^[1,5,6]) ^10

    构建自己的pow方法:mypow

    能够计算 a^b

    • part1=mypow(a,4)
    • part2=mypow(backtrack(a,[1,5,6]),10)

    最后结果res=( part1*part2 )%base

    构建mypow方法:

    为了快速计算,我们分奇偶数进行:

     mypow(a,b)=

    • a*mypow(a,b-1), b%2!=0
    • mypow(a,b/2)*mypow(a,b/2), b%2==0

    代码参考:

     1 class Solution {
     2 public:
     3     int base = 1337;
     4     //c=a*b
     5     //c%k=(a%k)*(b%k)%k
     6     int myPow(int a, int b) {
     7         if(b==0) return 1;
     8         a = a%base;
     9         if(b%2) {//odd
    10             return (a * myPow(a,b-1)) % base; 
    11         } else {//even
    12             int part = myPow(a,b/2);
    13             return (part*part) % base;
    14         }
    15     }
    16     int superPow(int a, vector<int>& b) {
    17         if(b.empty()) return 1;
    18         int cur = b.back();
    19         int part1 = myPow(a, cur);
    20         int part2 = 1;
    21         b.pop_back();
    22         if(!b.empty()) part2=myPow(superPow(a,b), 10);
    23         return (part1*part2)%base;
    24     }
    25 };
  • 相关阅读:
    DevExpress.XtraCharts.chartControl
    DevExpress控件之:ChartControl 动态绑定数据
    字符串的方法详解
    编码
    格式化输出
    关于while循环中的break和continue的区别
    while循环和for循环
    [AGC028D] Chords
    [CF1392H] ZS Shuffles Cards
    [CF568E] Longest Increasing Subsequence
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/14605079.html
Copyright © 2011-2022 走看看