C#刷遍Leetcode面试题系列连载(6):No.372 - 超级次方

点击蓝字“dotNET匠人”关注我哟

加个“星标”,每日 7:15,好文必达!

前文传送门:

C# 刷遍 Leetcode 面试题系列连载(1) - 入门与工具简介

C#刷遍Leetcode面试题系列连载(2): No.38 - 报数

C#刷遍Leetcode面试题系列连载(3): No.728 - 自除数

C#刷遍Leetcode面试题系列连载(4): No.633 - 平方数之和

C#刷遍Leetcode面试题系列连载(5):No.593 - 有效的正方形

上一篇 LeetCode 面试题中,我们分析了一道难度为 Medium 的数学题 - 有效的正方形,提供了3种方法。今天我们继续来分析一道难度为 Medium 的面试题吧。


今天要给大家分析的面试题是 LeetCode 上第 372 号问题,

LeetCode - 372. 超级次方

https://leetcode.com/problems/super-pow/

题目描述


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

示例 1:

a = 2
b = [3]结果: 8

示例 2:

a = 2
b = [1,0]结果: 1024

示例 3:

a = 2147483647
b = [2,0,0]
结果: 1198

致谢:

特别感谢 @Stomach_ache 添加这道题并创建所有测试用例。

  • 题目难度:Medium

  • 提交次数:6.3K

  • 通过次数:2.3K

  • 通过率:35.95%

  • 相关标签

    • 数学

      https://leetcode-cn.com/tag/math

  • 相似题目

    Pow(x, n)

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



相关知识与思路:

理解题意:

本题要求计算  % 1337,输入中a是以十进制形式给出,而b是以数组的形式给出的,数组中依次存有十进制下的每位数字。

解法1: 直接用字符串处理

public class Solution
{public int SuperPow(int a, int[] b){int res = 0;StringBuilder sb = new StringBuilder();foreach (var item in b)sb.Append(item);int.TryParse(sb.ToString(), out int p);var val = (int) Math.Pow(a, p);res = val - (val / 1337)*1337;return res;}
}

会发现,对数b较大时(示例3)会越界。因此需利用模运算的性质来优化~

模运算的常用性质如下:

分配率

(a + b) mod n = [(a mod n) +(b mod n) ] mod n。

 mod n = [(a mod n) (b mod n) ] mod n

d mod() =(d mod a) + a [(d \ a) mod b] +  [(d \ a \ b) mod c],其中\是欧几里德除法的商的算子。

c mod(a + b) =(c mod a) + [ (a + b) ] mod b - [ (a + b) ] mod a。

除法 :A/B 

mod n = [(a mod n) ( mod n) ] mod n,当b和n互质时,右边被定义。反之亦然。

相乘后的逆(Inverse multiplication)

[( mod n) ( mod n) ] mod n = a mod n。

特殊性质:x %  == x & ()

另外,与之相关的一个概念是同余(Congruence relation)。

此题需用到分配率中的:  mod n = [(a mod n) (b mod n) ] mod n

解法2 已AC代码:

public class Solution
{const int Mod0 = 1337;public int SuperPow(int a, int[] b){if (b.Length == 0)return 1;var res = 1;for (int i = b.Length - 1; i >= 0; i--){res = powMod(a, b[i]) * res % Mod0;a = powMod(a, 10);}return res;}private int powMod(int a, int m){a %= Mod0;int result = 1;for (int i = 0; i < m; i++)result = result * a % Mod0;return result;}
}

Rank:

执行用时: 116 ms, 在所有 csharp 提交中击败了100.00%的用户.

按理说,如果将a%m改为a-(a/m)*m,代码运行速度会变快些,直接进行模运算确实会慢一些。

解法3 已AC代码:

public class Solution
{const int Mod0 = 1337;public int SuperPow(int a, int[] b){if (b.Length == 0)return 1;var res = 1;for (int i = b.Length - 1; i >= 0; i--){var powModResult = powMod(a, b[i]) * res;res = powModResult - (powModResult / Mod0) * Mod0;a = powMod(a, 10);}return res;}private int powMod(int a, int m){a = a - (a / Mod0) * Mod0;int result = 1;for (int i = 0; i < m; i++)result = result * a - (result * a / Mod0) * Mod0;return result;}
}

Rank:执行用时: 112 ms, 在所有 csharp 提交中击败了100.00%的用户

示例代码: 

https://github.com/yanglr/Leetcode-CSharp/tree/master/leetcode372 .


欢迎提出更佳的解决思路~

最近正在看百度前副总裁的《俞军产品方法论》,提升一下自己的产品思维。这本书2019年12月才由中信出版社出版,良心好书,推荐给大家~

End

作者简介:Bravo Yeung计算机硕士,知乎干货答主(2.3万关注者,获73K 赞同, 34K 感谢, 210K 收藏)。曾在国内 Top3互联网视频直播公司短暂工作过,后加入一家外企做软件开发至今。

欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。

欢迎各位读者加入 .NET技术交流群,在公众号后台回复“加群”或者“学习”即可。

  • 大家好,我就是区块链本人。今天,我要给你们介绍我的家族…

  • 只因写了一段爬虫,公司200多人被一锅全端!

  • 真实的上海IT圈:张江男vs漕河泾男

  • C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介

  • .NET斗鱼直播弹幕客户端(上)

  • 写给.NET开发者看的Python3上手指南系列(1):Python3与C# 基础语法对比

  • 硬货 - 技术人也能轻松玩转公众号?正确姿势竟然是...

转发至朋友圈,是对我最大的支持。

朕已阅 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Postman 测试你的 API

使用 Postman 测试你的 APIIntro最近想对 API 做一些自动化测试&#xff0c;看了几个工具&#xff0c;最后选择了 postman&#xff0c;感觉 postman 的设计更好一些&#xff0c;我们可以在请求发送之前和请求获取到响应之后都可以自定义脚本&#xff0c;很灵活。而且 postman 的…

使用 postman 给 API 写测试

使用 postman 给 API 写测试Intro上次我们简单介绍了 使用 postman 测试 API&#xff0c;这次主要来写一些测试用例以检查请求的响应是否符合我们的预期以及如何使用脚本测试使用 postman 内置的随机变量postman 内置的有一些产生随机值的变量&#xff0c;在发送请求时随机生成…

ASP.NETCore编程实现基本认证

HTTP基本认证在HTTP中&#xff0c;HTTP基本认证&#xff08;Basic Authentication&#xff09;是一种允许浏览器或其他客户端程序使用&#xff08;用户名&#xff0c;口令&#xff09;请求资源的身份验证方式&#xff0c;不要求cookie,session identifier、login page等标记或载…

计算机原理(计算机系统漫游)

计算机五大组成部件&#xff1a;运算器&#xff08;ALU&#xff09;&#xff0c;控制器&#xff0c;存储器&#xff0c;输入部件&#xff0c;输出部件 1.控制器 2.运算器 逻辑运算&#xff08;判断事物的对与错&#xff09; 数学运算(11) 控制器运算器中央处理器&#xff08;CP…

使用ASP.NET Core 3.x 构建 RESTful API - 4.2 过滤和搜索

向Web API传递参数数据可以通过多种方式来传给API。 Binding Source Attributes 会告诉 Model 的绑定引擎从哪里找到绑定源。 共有以下六种 Binding Source Attributes&#xff1a; [FromBody] 请求的 Body [FromForm] 请求的 Body 中的 form数据 [FromHeader] 请求的 Header […

360浏览器linux版本_360安全浏览器崩溃解决方案

360安全浏览器崩溃解决方案方案一&#xff1a;打开360安全浏览器&#xff0c;按键盘上的F1调出浏览器医生界面&#xff0c;点击一键修复即可。如图所示&#xff1a;方案二&#xff1a;360浏览器打开了太多标签占用内存&#xff0c;并且随着浏览器开着的时间越长&#xff0c;占用…

.NET 开源软件开发BIM工具包xBIM

一、xBIM 简介BIM&#xff08;Building Information Modelling&#xff09;建筑信息模型&#xff0c;xBIM&#xff08;eXtensible Building Information Modelling&#xff09;可扩展的建筑信息模型。它是一个.NET 开源软件开发BIM工具包&#xff0c;支持BuildingSmart数据模型…

2019(dotNet全栈开发)公众号回顾

2019年已经过去&#xff0c;人口红利已经逐渐消失&#xff0c;也许这是这10年互联网史上最糟糕的一年&#xff0c;也可能这是未来10年互联网史上最好的一年关于公众号&#xff0c;我其实很早就开始注册了&#xff0c;只是一直没怎么运营&#xff08;ps&#xff1a;不知道怎么推…

CSS padding margin border属性讲解

把所有网页上的对象都放在一个盒&#xff08;box&#xff09;中 &#xff0c;设计师可以通过创建定义来控制这个盒的属性&#xff0c;这些对象包括段落、列表、标题、图片以及层。 盒模型主要定义四个区域&#xff1a; 内容&#xff08;content&#xff09; 内边距&#xff08;…

【实战 Ids4】║ 客户端、服务端、授权中心全线打通!

1、经过元旦两天的全力整改&#xff0c;终于在这新的一年&#xff0c;完成了我的布道生涯的第一个大步走 —— 那就是客户端&#xff08;VUE&#xff09;、服务端&#xff08;ASP.NET Core API&#xff09;、授权中心&#xff08;IdentityServer4&#xff09;的大融合&#xff…

补丁 检测系统_大云制造 | BCLinux For ARM64 V7.6操作系统正式发布

友情提示&#xff1a;全文3000多文字&#xff0c;预计阅读时间10分钟概述大云企业操作系统(BC-Linux&#xff0c;BigCloud Enterprise Linux)是中移(苏州)软件技术有限公司借助开源社区优势&#xff0c;通过定制化手段研发的高性能、安全可靠、自主可控的企业级Linux操作系统。…

告别2019,写给2020:干好技术,要把握好时光里的每一步

本文来自&#xff1a;长沙.NET技术社区 邹溪源不知不觉&#xff0c;一晃年关将近&#xff0c;即将翻开2019&#xff0c;进入新的一页。&#xff08;本文写于2019年12月27日&#xff09;这周已经在朋友圈看到了来自公众号《恰同学少年》《Edi.Wang》和《吃草的罗汉》几位老师写下…

单片机课程设计数字心率计_如何选购合适的PH计

聚舟供应的PH计PH计已经被广泛应用于各个行业&#xff0c;如工业、电力、农业、医药、食品、科研和环保等领域&#xff0c;在酸碱值检测时必不可少的&#xff0c;那么该如何选购呢&#xff1f;聚舟销售的PH计也有多种样式与型号&#xff0c;各种型号都供应充足&#xff0c;欢迎…

cd返回上一 git_如何使用Git实现自动化部署你的项目

在开发过程中&#xff0c;我们不可避免的会用到版本控制。你可能对 Git 和 SVN 有所了解。一开始基本都是在用SVN&#xff0c;现在可能都进化到用Git了吧&#xff0c;因为SVN缺点比较多。这里就不过于多的介绍Git的优点了。不知道大家一开始是怎么使用 git 进行开发的&#xff…

在Asp.Net Core中使用ModelConvention实现全局过滤器隔离

从何说起这来自于我把项目迁移到Asp.Net Core的过程中碰到一个问题。在一个web程序中同时包含了MVC和WebAPI&#xff0c;现在需要给WebAPI部分单独添加一个接口验证过滤器IActionFilter&#xff0c;常规做法一般是写好过滤器后给需要的控制器挂上这个标签&#xff0c;高级点的做…

2 未匹配到任何借口_拼多多【关键词精确匹配溢价】给你想要的精准流量,让你订单暴增的秘诀...

关键词匹配方式升级啦&#xff0c;开启精确匹配溢价功能&#xff0c;拥有更多精准流量。为帮助商家解决在使用多多搜索时&#xff0c;遇到的关键词流量不精准、流量不可控、点击率低的问题&#xff0c;多多搜索新推出【关键词精确匹配溢价】功能。通过精确匹配溢价功能&#xf…

如何运用领域驱动设计 - 领域服务

概述本文将介绍领域驱动设计&#xff08;DDD&#xff09;战术模式中另一个非常重要的概念 - 领域服务。在前面两篇博文中&#xff0c;我们已经学习到了什么是值对象和实体&#xff0c;并且能够比较清晰的定位它们自身的行为。但是在某些时候&#xff0c;你会发现某一些业务行为…

指令打印与驱动打印随笔

本文对指令打印和驱动打印做了一个简要的介绍&#xff0c;分享了在开发客户端打印组件时的一些过程并提出了一个新轮子用于解决老的问题并引出更多的新问题。全文大概 3500 字无图&#xff0c;阅读大概需要 7 分钟。驱动打印是指&#xff1a;使用 PrintDocument 进行打印。通过…

er图转为数据流程图_「数据架构」实体关系模型介绍

实体-关系模型(或ER模型)描述特定知识领域中相关的事物。基本的ER模型由实体类型(对感兴趣的事物进行分类)和指定实体之间可能存在的关系(那些实体类型的实例)组成。在软件工程中&#xff0c;为了执行业务流程&#xff0c;ER模型通常用于表示业务需要记住的内容。因此&#xff…

WeihanLi.Npoi 1.7.0 更新介绍

WeihanLi.Npoi 1.7.0 更新介绍Intro昨天晚上发布了 WeihanLi.Npoi 1.7.0 版本&#xff0c;增加了 ColumnInputFormatter/ ColumnOutputFormatter&#xff0c;又进一步增强了导入导出的灵活性&#xff0c;来看下面的示例ColumnInputFormatter/ColumnOutputFormatter示例 Model:i…