Swift 解題:LeetCode 372 超級次方(Super Pow)

在這里插入圖片描述
在這里插入圖片描述

文章目錄

    • 摘要
    • 描述
    • 題解答案
    • 題解代碼分析
      • 代碼解析
    • 示例測試及結果
    • 時間復雜度
    • 空間復雜度
    • 總結

摘要

在算法題里,有一些問題看似“簡單”,比如算一個冪次方,但一旦放大規模就完全不同了。LeetCode 372 超級次方就是這樣的題目。普通的冪運算沒什么難度,但當指數 b 是一個用數組表示的上千位數字時,直接計算會導致溢出或者運行緩慢。本文會結合 Swift 給出可運行的解題方案,并分析其原理和實際應用場景。

描述

題目的要求是:
計算 a^b % 1337,其中:

  • a 是一個正整數(范圍在 1 到 231-1 之間)
  • b 是一個非常大的正整數,并且用數組形式存儲(數組每一位是 b 的十進制數字)。

舉幾個例子:

  1. a = 2, b = [3]2^3 % 1337 = 8
  2. a = 2, b = [1,0]2^10 % 1337 = 1024
  3. a = 1, b = [4,3,3,8,5,2] → 無論怎么冪次,結果都是 1
  4. a = 2147483647, b = [2,0,0] → 結果 1198

核心難點

  • b 太大了,不能直接轉成整數再做冪運算。

  • 普通冪運算會溢出,需要用模冪運算(modular exponentiation)。

  • 冪運算的拆分技巧:

    • a^(b1b2...bn) = ((a^(b1b2...bn-1))^10 * a^bn) % mod

題解答案

這題的關鍵在于“分治 + 快速冪 + 模運算”。
我們要不斷從 b 的最后一位往前處理,把指數拆分為小塊,然后應用公式:

a^1234 = ((a^123)^10) * a^4

這樣我們就能一位一位處理 b,避免溢出。

題解代碼分析

下面是 Swift 的解法:

import Foundationclass Solution {private let MOD = 1337func superPow(_ a: Int, _ b: [Int]) -> Int {return helper(a % MOD, b)}private func helper(_ a: Int, _ b: [Int]) -> Int {if b.isEmpty { return 1 }// 取出最后一位var newB = blet lastDigit = newB.removeLast()// 計算 (a^lastDigit % MOD)let part1 = modPow(a, lastDigit)// 計算 ((a^rest)^10 % MOD)let part2 = modPow(helper(a, newB), 10)return (part1 * part2) % MOD}// 快速冪取模private func modPow(_ base: Int, _ power: Int) -> Int {var result = 1var b = base % MODvar p = powerwhile p > 0 {if p % 2 == 1 {result = (result * b) % MOD}b = (b * b) % MODp /= 2}return result}
}

代碼解析

  1. superPow:入口函數,先對 a 取模,避免不必要的大數計算。

  2. helper:遞歸函數,把數組 b 的最后一位拿出來處理。

    • part1 = a^lastDigit % MOD
    • part2 = (a^rest)^10 % MOD
    • 然后組合結果 (part1 * part2) % MOD
  3. modPow:快速冪函數,通過二分法計算 (base^power) % MOD,避免指數過大。

這種寫法巧妙地利用了指數展開公式和快速冪,既避免了大數溢出,也保證了運行效率。

示例測試及結果

我們用幾個例子跑一下:

let solution = Solution()print(solution.superPow(2, [3]))              // 輸出: 8
print(solution.superPow(2, [1,0]))           // 輸出: 1024
print(solution.superPow(1, [4,3,3,8,5,2]))   // 輸出: 1
print(solution.superPow(2147483647, [2,0,0])) // 輸出: 1198

運行結果:

8
1024
1
1198

跟題目給的示例完全一致

時間復雜度

  • 快速冪函數 modPow 的時間復雜度是 O(log power)
  • 我們對 b 的每一位數字都要調用一次 modPow,所以總復雜度是 O(len(b) * log a)
  • 對于 len(b) <= 2000,這個復雜度是完全可以接受的。

空間復雜度

  • 遞歸的深度取決于 b 的長度,最多 2000。
  • 所以空間復雜度是 O(len(b))

總結

這道題的精髓在于:

  1. 不能直接算,要學會把指數拆分。
  2. 快速冪 + 模運算是大數冪問題的通用解法。
  3. 實際場景里,類似的思路常見于加密算法(比如 RSA),因為加密里經常需要計算“大數的模冪運算”。

所以這題不僅僅是算法訓練題,還能讓我們更好地理解實際中的密碼學和大數運算的實現方式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98077.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98077.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

揭秘23種設計模式的藝術與技巧之結構型

結構型模式&#xff1a;優化軟件結構的策略代理模式&#xff08;Proxy Pattern&#xff09;代理模式就像一個經紀人&#xff0c;代表真實對象進行操作。比如&#xff0c;在網絡訪問中&#xff0c;我們可能會通過代理服務器來訪問外部網站。在軟件中&#xff0c;當一個對象由于某…

PyTorch圖像數據轉換為張量(Tensor)并進行歸一化的標準操作

transform ToTensor() 是 PyTorch 中用于將圖像數據轉換為張量&#xff08;Tensor&#xff09;并進行歸一化的標準操作&#xff0c;以下是對其功能的逐層解析及關鍵細節&#xff1a;核心功能總結功能描述類型轉換將 PIL Image / numpy 數組 → PyTorch Tensor (dtype: torch.f…

HarmonyOS學習

一&#xff0c;DevEoc Studio基本內容學習項目工程目錄entry 默認的項目入口模塊ets 界面相關文件&#xff08;目前都放入pages文件內即可&#xff09;resource資源文件&#xff0c;配置文件index.est默認文件’ ‘開頭的一般為裝飾器&#xff0c;修飾功能&#xff0c;來約定后…

【大前端】Vue 和 React 主要區別

Vue 與 React 的主要區別 在前端開發領域&#xff0c;Vue 和 React 是兩大最受歡迎的框架/庫。盡管它們都可以幫助我們構建現代化的 Web 應用&#xff0c;但在設計理念、開發方式、生態系統等方面有許多不同。本文將從多個角度對兩者進行對比。 目錄 框架與庫的定位核心理念…

高級RAG策略學習(五)——llama_index實現上下文窗口增強檢索RAG

LlamaIndex上下文窗口實現詳解 概述 本文檔詳細講解基于LlamaIndex框架實現的上下文窗口RAG系統&#xff0c;重點分析關鍵步驟、語法結構和參數配置。 1. 核心導入與環境配置 1.1 必要模塊導入 from llama_index.core import Settings from llama_index.llms.dashscope import …

Doris 數據倉庫例子

基于 Apache Doris 構建數據倉庫的方案和具體例子。Doris 以其高性能、易用性和實時能力&#xff0c;成為構建現代化數據倉庫&#xff08;特別是 OLAP 場景&#xff09;的優秀選擇。一、為什么選擇 Doris 構建數據倉庫&#xff1f;Doris&#xff08;原名 Palo&#xff09;是一個…

WebRTC進階--WebRTC錯誤Failed to unprotect SRTP packet, err=9

文章目錄 原因分析 SRTP Anti-Replay 機制 客戶端源碼 err=9 的定義: 為什么會觸發 replay_fail ? 解決方向 原因分析 SRTP Anti-Replay 機制 SRTP 收包時會用一個 Replay Window(64/128個序列號大小)檢查 seq 是否合理。 如果你構造的恢復包 recover_seq 比當前接收窗口…

Web服務與Nginx詳解

文章目錄前言一、Web 概念1.1 Web 的基本概念1.1.1 特點1.2 B/S 架構模型1.3 Web 請求與響應過程1.4 靜態資源與動態資源1.5 Web 的發展階段1.6 實驗&#xff1a;搭建最小 Web 服務1.6.1 實驗目標1.6.2 實驗步驟1.7 小結二、HTTP 與 HTTPS 協議2.1 HTTP 與 HTTPS 的區別2.2 HTT…

CC-Link IE FB 轉 DeviceNet 實現歐姆龍 PLC 與松下機器人在 SMT 生產線錫膏印刷環節的精準定位控制

案例背景在電子制造行業&#xff0c;SMT&#xff08;表面貼裝技術&#xff09;生產線對設備的精準控制要求極高。某電子制造企業的 SMT 生產線中&#xff0c;錫膏印刷機、SPI&#xff08;錫膏厚度檢測儀&#xff09;等前段設備采用了基于 CC-Link IE FB 主站的歐姆龍 NJ 系列 P…

IP5326_BZ 支持C同口輸入輸出的移動電源芯片 2.4A的充放電電流 支持4LED指示燈

IP5326 是一款集成升壓轉換器、鋰電池充電管理、電池電量指示的多功能電源管理 SOC&#xff0c;為移動電源提供完整的電源解決方案。得益于 IP5326 的高集成度與豐富功能,使其在應用時僅需極少的外圍器件&#xff0c;并有效減小整體方案的尺寸&#xff0c;降低 BOM 成本。IP532…

若依基礎學習

若依基礎學習 1.修改數據庫密碼以及連接名&#xff1a; RuoYi-Vue-master\ruoyi-admin\src\main\resources\application-druid.yml2.各個文件作用&#xff1a; ruoyi-admin (主啟動)├── ruoyi-framework (框架核心)│ ├── ruoyi-common (通用工具)│ └── ruoyi-sy…

靶向肽Dcpep

名稱&#xff1a;靶向肽Dcpep三字母序列&#xff1a;NH2-Phe-Tyr-Pro-Ser-Tyr-His-Ser-Thr-Pro-Gln-Arg-Pro-OH單字母序列&#xff1a;NH2-FYPSYHSTPQRP-OH分子式&#xff1a;C69H94N18O19分子量&#xff1a;1479.62備注&#xff1a;僅供科研&#xff0c;不用于人體簡述&#x…

華為在國內搞的研發基地有多野?標桿游學帶你解鎖“研發界頂流”

寶子們&#xff01;原來華為在國內有這么多“寶藏研發基地”&#xff0c;之前總覺得遙不可及走進深圳坂田總部——1.3平方公里的園區&#xff0c;走進去就像進了“科技版大觀園”&#xff0c;21層研發主樓看著就很有氣勢&#xff0c;天鵝湖邊的路全用科學家名字命名&#xff0c…

linux缺頁中斷頻繁怎么定位

1,怎么看內存是否有缺頁中斷 查看日志: dmesg | grep “do fault” perf record -e page-faults -g -p <PID> 系統級監控: 使用 vmstat 查看全局缺頁中斷(si/so 表示換入/換出頁數) vmstat 1 # 每秒刷新,觀察 si/so 列 iostat顯示磁盤使用情況,舉例iostat -x …

06-Hadoop生態系統組件(2)

4. 數據查詢組件 4.1 Apache Hive詳解 from typing import Dict, List, Any, Optional, Tuple, Union from dataclasses import dataclass from enum import Enum from datetime import datetime import re import jsonclass HiveTableType(Enum):"""Hive表類型…

【自動化實戰】Python操作Excel/WORD/PDF:openpyxl與docx庫詳解

在現代辦公環境中&#xff0c;我們經常需要處理各種文檔格式&#xff0c;如Excel表格、Word文檔和PDF文件。手動處理這些文檔不僅耗時&#xff0c;而且容易出錯。Python提供了多個強大的庫來實現文檔處理的自動化&#xff0c;本文將重點介紹如何使用openpyxl和docx庫來操作Exce…

構建安全的自動駕駛:軟件測試中的編碼規范與AI驗證

自動駕駛不再只是未來想象&#xff0c;它正在以驚人的速度走向現實。但這一變革也帶來了軟件開發的全新命題。與傳統車輛不同&#xff0c;自動駕駛依賴復雜的AI模型、傳感系統和車載決策單元&#xff0c;必須應對更多現實環境的不確定性。在強監管、高風險、快節奏的背景下&…

2025高教社數學建模國賽C題 - NIPT的時點選擇與胎兒的異常判定(完整參考論文)

基于機器學習與統計模型的NIPT檢測優化與異常判定問題研究 摘要 非侵入性產前檢測(NIPT)作為一種無創安全的胎兒染色體異常篩查技術,在現代產前醫療中發揮著重要作用,其準確性與檢測時機及異常判定的科學性直接影響臨床決策。然而,男胎Y染色體濃度受孕周數、孕婦BMI等多…

一種基于注解與AOP的Spring Boot接口限流防刷方案

1. 添加Maven依賴<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupI…

代碼隨想錄二刷之“貪心算法”~GO

簡單題目 1.455. 分發餅干 - 力扣&#xff08;LeetCode&#xff09; func findContentChildren(g []int, s []int) int {sort.Ints(g)sort.Ints(s)index : 0for i : 0;i<len(s);i{if index < len(g) && g[index] < s[i]{index}}return index }感悟&#xff…