题目:

你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。

示例 1:

输入:a = 2, b = [3]
输出:8
示例 2:

输入:a = 2, b = [1,0]
输出:1024
示例 3:

输入:a = 1, b = [4,3,3,8,5,2]
输出:1
示例 4:

输入:a = 2147483647, b = [2,0,0]
输出:1198

提示:

  • 1 <= a <= 231 - 1
  • 1 <= b.length <= 2000
  • 0 <= b[i] <= 9
  • b 不含前导 0

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/super-pow
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:递归+快速幂

拆分方式,将数组b的最后一位值作为次方的值,就可以将每次幂运算缩小。

例如a = 5 , b = [123]

这里每次求幂计算之前 和 之后都要 %1337,防止数值过大,导致求幂的结果溢出。(先求幂再取模 与 先取模再求幂得到的结果一样)

一、将每一个次方都转化成 10以内的数字,写一个pow(int a, int b)方法处理10以内的幂次方,需要进行以下步骤:

1.先将底数与MOD取模运算;

2.判断指数的奇偶性,如果为偶数,就将指数分为对等两份计算,如果为奇数,就需要先提出一个底数,再将指数(这时候为偶数了)分为对等两份进行运算。

二、将大于10的指数进行分解,写一个indexpow( int a, int[] b, int inde)方法,进行以下步骤:

1.特殊判断,b数组长度为0的情况,直接返回1;

2.然后从数组b中从后往前分解出最低位的指数和剩余的指数,例如 2123 = (2 12*10+3)= 212*10 + 23 = (212)10+2

代码:

 1 class Solution {
2 int MOD = 1337;
3 public int superPow(int a, int[] b) {
4 return indexpow(a, b, b.length - 1) % MOD;
5 }
6 private int indexpow(int a, int[] b, int index){
7 //如果数组长度为0,则index = -1
8 if(index == -1) return 1;
9 //(5^12)^10 * 5^3
10 //index-1:最后一位数的前一位
11 return pow(indexpow(a, b, index-1), 10) * pow(a, b[index]) % MOD;
12 }
13 //10以内的幂次方
14 private int pow(int a, int b){
15 a %= MOD;
16 //如果底数为1或者指数为0
17 if(a == 1 || b == 0) return 1;
18 //如果指数为偶数
19 if((b & 1) == 0){
20 return pow(a * a, b/2) % MOD;
21 }else{
22 //如果指数为奇数就需要先分一个底数出来
23 return a * pow(a, b-1) % MOD;
24 }
25 }
26 }

力扣372(java)-超级次方(中等)的更多相关文章

  1. Java实现 LeetCode 372 超级次方

    372. 超级次方 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出. 示例 1: 输入: a = 2, b = [3] 输出: 8 示例 2: ...

  2. C#版(击败100.00%的提交) - Leetcode 372. 超级次方 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...

  3. Leetcode 372.超级次方

    超级次方 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出. 示例 1: 输入: a = 2, b = [3] 输出: 8 示例 2: 输入: a ...

  4. 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题

    题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...

  5. 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度

    题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...

  6. 力扣1052. 爱生气的书店老板-C语言实现-中等难度

    题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时 ...

  7. 力扣算法经典第一题——两数之和(Java两种方式实现)

    一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  8. 力扣50题 Pow(x,n)

    本题是力扣网第50题. 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 采用递归和非递归思路python实现. class Solution: #递归思路 def myPow_recurs ...

  9. 【力扣leetcode】-787. K站中转内最便宜的航班

    题目描述: 有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 p ...

  10. 力扣算法题—069x的平方根

    实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...

随机推荐

  1. C#之winform捕获Console.WriteLine内容到日志文件

    问题描述 之前接手同事的项目,是一个类似于服务端后台的Winform程序,主界面隐藏起来,只再任务栏显示程序图标. 整个项目里面没有日志记录功能,全靠Console.WriteLine打印信息.自己调 ...

  2. 3D渲染慢,直接买显卡还是用云渲染更划算?

    3D渲染对建筑师和设计师来说并不陌生,3D渲染的过程中出现渲染卡顿.特殊材质难以渲染,或者本地配置不足.本地渲染资源不够时,常常会影响工作效率.本文比较了3D渲染时,为提高工作效率,买显卡还是用云渲染 ...

  3. Button按钮Effect的用法

    教大家写一个好看的Button按钮 代码简单粗暴 <Grid > <Border Width="200" Height="30" Margin ...

  4. 记录--记录用前端代替后端生成zip的过程,速度快了 57 倍!!!

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 业务场景: 产品有个功能是设置主题.类似手机自动切换壁纸,以及其他功能颜色,icon,字体等. 管理员需要在后端管理系统多次下载不同主题, ...

  5. MindSponge分子动力学模拟——自建力场(2024.03)

    技术背景 在MindSponge教程合集中我们已经介绍了很多使用MindSponge进行分子动力学模拟的方法,这里主要介绍在MindSponge中自定义一个力场.在传统的MD软件中,如果你希望去开发一 ...

  6. MyBatis中的association与collection应用

    MyBatis中的association与collection应用 在使用 MyBatis进行数据库操作时,经常会遇到需要处理对象之间的关联关系和集合映射的情况.为了更好地实现对象关系映射,MyBat ...

  7. python整理1992、2009国家标准学科分类及代码数据并存入MySQL数据库

    文件内容 处理结果 代码 1 import pandas as pd 2 import pymysql 3 4 5 def get_subject_1992(): 6 res={} 7 the_for ...

  8. 探索Avalonia:C#跨平台UI框架的力量

    随着跨平台应用的需求不断增长,开发人员需要一种能够在不同操作系统上运行的用户界面(UI)框架. Avalonia 是一种引人注目的选择.在本文中,我们将深入了解 Avalonia 是什么,它与 WPF ...

  9. #Every-SG#HDU 3595 GG and MM

    题目 有\(n\)个游戏,每个游戏只要能进行就必须进行, 对于每个游戏有两堆石子,每次可以将数量多的中取出小堆石子数量的整数倍, 无法操作者为负,问先手是否必胜 分析 如果单个游戏最大操作次数为奇数次 ...

  10. 资深技术笔译总结的这7条建议,看完提PR效率倍增

    战码先锋,PR征集令(以下简称"战码先锋")第二期正如火如荼地进行中,涉及OpenAtom OpenHarmony(以下简称"OpenHarmony")主干仓. ...