Super Pow--C++ Clean and Short Solution

翻译 2016年08月29日 22:19:34

关于Leetcode中的Super Pow 一题有几种不同的解法,在Leetcode的discuss板块中,我发现了一种很棒的解题思路,顺便翻译一下(加深记忆)。

作者:fentoyal
地址:C++ Clean and Short Solution

翻译如下

同余模定理:ab%k=(a%k)(b%k)%k

由于幂存放在数组中,我们最好将它一位一位的处理。

通过观察可知:(其实为了便于理解可以先将取模的过程去掉,这里保留原式子)
a1234567%k=(a1234560%k)(a7%k)%k=(a123456%k)10%k(a7%k)%k

看起来有点复杂?让我们采取另一种表达方式:
假设f(a,b)表示计算ab%k 然后利用该函数表示上面的公式:
f(a,1234567)=f(a,1234560)f(a,7)%k=f(f(a,123456),10)f(a,7)%k

代码实现如下:

class Solution {
    const int base = 1337;
    int powmod(int a, int k) //a^k mod 1337 where 0 <= k <= 10
    {
        a %= base;
        int result = 1;
        for (int i = 0; i < k; ++i)
            result = (result * a) % base;
        return result;
    }
public:
    int superPow(int a, vector<int>& b) {
        if (b.empty()) return 1;
        int last_digit = b.back();
        b.pop_back();
        return powmod(superPow(a, b), 10) * powmod(a, last_digit) % base;
    }
};

Note: 这种方法显然不是最快的,但是当我们在面试中被问到这个问题时可以很快的理解并写出。还有这个方法没有使用内建的pow函数,我想这也是面试官所期待的。
希望它对你有帮助!

leetcode 336. Palindrome Pairs 372. Super Pow

336. Palindrome Pairs题目大意给你n个字符串,选出任意两个不同的字符串i和j,其拼接后是否为回文子串,返回所有可能的小标组合。思路一直接遍历所有可能的组合,并判断是否为回文子串,其...

LeetCode--372. Super Pow

LeetCode–372. Super Pow

[java][leetcode 372]Super Pow

Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large posi...
  • ghui23
  • ghui23
  • 2016年07月22日 16:48
  • 295

372. Super Pow

Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large pos...
  • Tomjx
  • Tomjx
  • 2017年05月22日 00:10
  • 82

探索c++的函数pow()的实现方法·数学与程序设计的结合(zz)

计算t的m次幂的方法:(探索c++的函数pow()的实现方法,数学与程序设计的结合) 源程序下载:http://pjy.studio.googlepages.com/powP.cpp 或到我的收藏...

Unix Network Programming Volume 1 Compile issue solution for the 2nd and 3rd edition

Unix Network ProgrammingVolume 1: The Sockets Networking API.Compile issue solution for the 2nd and ...

SharePoint solution and feature management with PowerShell

SharePoint solution and feature management with PowerShell
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Super Pow--C++ Clean and Short Solution
举报原因:
原因补充:

(最多只允许输入30个字)