LeetCode 簡單JS刷題

目錄

返回數組最后一個元素

2787.將一個數字表示成冪的和的方案數

326.3的冪

1780.判斷一個數字是否可以表示成三的冪的和

342.4的冪


返回數組最后一個元素

1.請你編寫一段代碼實現一個數組方法,使任何數組都可以調用?array.last()?方法,這個方法將返回數組最后一個元素。如果數組中沒有元素,則返回?-1?。

你可以假設數組是?JSON.parse?的輸出結果。

示例 1 :

輸入:nums = [null, {}, 3]
輸出:3
解釋:調用 nums.last() 后返回最后一個元素: 3。

示例 2 :

輸入:nums = []
輸出:-1
解釋:因為此數組沒有元素,所以應該返回 -1。

提示:

  • arr?是一個有效的 JSON 數組
  • 0 <= arr.length <= 1000
Array.prototype.last = function() {return this.length ? this.at(-1) : -1
};// at支持負索引,-1表示倒數第一個位置,-2則是倒數第二,以此類推
Array.prototype.last = function() {return this.length ? this.[this.length-1] : -1
};

2787.將一個數字表示成冪的和的方案數

2787. 將一個數字表示成冪的和的方案數

提示

給你兩個??整數?n?和?x?。

請你返回將?n?表示成一些?互不相同?正整數的?x?次冪之和的方案數。換句話說,你需要返回互不相同整數?[n1, n2, ..., nk]?的集合數目,滿足?n = n1x + n2x + ... + nkx?。

由于答案可能非常大,請你將它對?109 + 7?取余后返回。

比方說,n = 160?且?x = 3?,一個表示?n?的方法是?n = 23 + 33 + 53?。

示例 1:

輸入:n = 10, x = 2
輸出:1
解釋:我們可以將 n 表示為:n = 32 + 12 = 10 。
這是唯一將 10 表達成不同整數 2 次方之和的方案。

示例 2:

輸入:n = 4, x = 1
輸出:2
解釋:我們可以將 n 按以下方案表示:
- n = 41 = 4 。
- n = 31 + 11 = 4 。

提示:

  • 1 <= n <= 300
  • 1 <= x <= 5
var numberOfWays = function (n, x) {const MOD = Math.pow(10,9)+7const current = []// 獲取以x為冪的數組,大小不超過nfor(let i=1;i<=n;i++){current[i]=Math.pow(i,x)}// 創建一個長度為n+1,初始為0的數組const dp = new Array(n+1).fill(0)dp[0]=1// 核心代碼for(num of current){for(let k=n;k>=num;k--){dp[k]=(dp[k-num]+dp[k])%MOD}}return dp[n]
};

理解:這是一個01背包問題,我們先回顧一下01背包問題的初始形態是什么樣子的,即有一個最大承重為 W 的背包,有價格為v,重量為w的商品一堆,需要在不超過最大承重的前提下完成所選商品最貴的問題。我們可以用二維數組和一維數組來解決這個問題,關鍵在于,我放了和不放哪個會比較大?

二維數組:

此時我的背包中的物品裝到了dp[i][j]的紅色三角形位置,此時我有倆個選項,

一是、我不把v[i]和w[i]的商品放進去,也就是dp[i-1][j]的綠色三角形位置,這么理解這個綠色三角形的位置吧,i-1 是上一個價格的所有狀態,dp[i-1][j] 可以被理解成再上一個價格在 j 重量時候的狀態;

二是、然后就是我放商品進去dp[i-1][j-w[i]]+v[i]? ,可以這么理解dp[i-1][j-w[i]],把上一次狀態調到剛好可以放下這個新商品的體積,這個時候的重量應該是 目前狀態的重量-新商品的體積對吧,也就是j-w[i],然后在這個狀態上加上新商品的價格。

for(let i=1;i<=V;i++){for(let j=1;j<=W;j++){if(j>w[i]){dp[i][j] = Max(dp[i-1][j],dp[i-1][j-w[i]]+v[i])}}
}

一維數組:

其實由二維數組可以發現一個點,就是你的重量必須是要按順序從小增到大的,也就是 j 既是索引,又代表了實際重量,那么一維數組中索引代表重量不就行了嗎,然后具體數值是價格

注意我下面寫的max(dp[i],dp[i-w[i]]+v[i]) 這個是基于v=1的時候的dp

OK,現在我們類比到這一題上面來

這里的n是不是就相當于是最大重量,由x次冪組成的數組[num1,num2,num3...],不就代表了索引和實際值相同的重量嗎

舉個例子 n=10 x=2

01249
01
1
2
3dp[3]+dp[3-1]
...dp[...]+dp[...-1]
10dp[10]+dp[10-1]dp[10]+dp[10-2]

上面的表格出來是不是就能看懂了,兩層循環,先遍歷n,然后里面嵌套是實現放不放num數組里的值,而且為什么這里不是用max比較大小呢?是因為無論我放不放都是一種方案,只要結果是實現了和等于n,所以應該是放和不放的情況加起來,用大白話理解就是,我有一系列的商品,我只是為了湊單,不管我放不放這一件它都是一種方案。

326.3的冪

326. 3 的冪

給定一個整數,寫一個函數來判斷它是否是 3?的冪次方。如果是,返回?true?;否則,返回?false?。

整數?n?是 3 的冪次方需滿足:存在整數?x?使得?n ==?3^{x}

示例 1:

輸入:n = 27
輸出:true

示例 2:

輸入:n = 0
輸出:false

示例 3:

輸入:n = 9
輸出:true

示例 4:

輸入:n = 45
輸出:false

提示:

  • -2^{31}?<= n <= 2^{31}?- 1

進階:你能不使用循環或者遞歸來完成本題嗎?

// 循環
var isPowerOfThree = function(n) {let flag = nwhile(flag>=1){if(flag===1){return true;break}flag=flag/3     }return false
};
// 不循環
var isPowerOfThree = function(n) {return n>0 && Math.pow(3,19)%n===0 ?true:false
};

題解:循環的做法就是不斷除3,一直到等于1就返回true,不等于1就為false;不循環的做法就是取模,設置一個最大的3的冪(n<3的19次冪),然后對n取模,如果取出來為0就說明是3的冪,為什么呢?因為3是質數,大家都知道質數只能被1和自身整除,所以在一個不斷取模的過程中不會有其他數字干擾,舉個例子:4不是質數吧,如果我們要判斷一個數是否為4的冪,再用這個取模方法就不行了,假如用4^{2}?對2和4分別取模,是不是得出來的結果都是0?但是2不是4的冪對吧,所以取模判斷這個方法只能對質數使用。

1780.判斷一個數字是否可以表示成三的冪的和

1780. 判斷一個數字是否可以表示成三的冪的和

給你一個整數?n?,如果你可以將?n?表示成若干個不同的三的冪之和,請你返回?true?,否則請返回?false?。

對于一個整數?y?,如果存在整數?x?滿足?y == 3x?,我們稱這個整數?y?是三的冪。

var checkPowersOfThree = function (n) {// n沒有除到底就繼續循環while(n>1){if(n%3===1){n=(n-1)/3}else if(n%3===0){n=n/3}else{// 除不出來說明不能展開為3的冪的和return false}}return true
};

題解:

大家看到這題會不會想到之前寫的那個背包問題?用01背包也能做,不過有倆個嵌套循環大大降低了代碼效率,而且會超時;

大家可以觀察一下,不知道大家的數學老師有沒有告訴過大家一個小技巧,如果有一個超大的數,判斷是否能被三整除,只需要把這個數的每一位拆分開,然后相加,這個時候數字是不是小了很多,我們就能判斷是否能被3整除了,例如:1233219這個數,拆分:1+2+3+3+2+1+9=21 =>2+1=3; 是不是說明1233219可以被3整除;

題目中說了,都是3的冪,且不同,那么我們可以這么做,我每次都除3,是不是剩下來的數不是余1,就是剛好除完?ok,可能有點抽象,我們來舉一個例子:

12=3^{1}+3^{2}?對吧,那么現在我們對這個數除3,也就變成了3^{0}+3^{1}是不是余1,然后我們-1繼續除3,0+3^{0},剛好為0,我猜你想知道為什么會這樣,題目有前提,每個都是3的冪,且不相同那么我對一個全是3的冪除3,是不是每個數還是不同,只要我一直除下去,能除的盡,是不是就能說明n是可以被展開為不同的3的冪的和

342.4的冪

342. 4的冪

給定一個整數,寫一個函數來判斷它是否是 4 的冪次方。如果是,返回?true?;否則,返回?false?。

整數?n?是 4 的冪次方需滿足:存在整數?x?使得?n ==?4^{x}

/*** @param {number} n* @return {boolean}*/
var isPowerOfFour = function(n) {while(n>=1){if(n===1){return true}n=n/4}return false
};
/*** @param {number} n* @return {boolean}*/
var isPowerOfFour = function(n) {return n>0 && n%3===1 && Math.pow(2,31)%n===0?true:false
};

題解:

這題大家是不是很眼熟,前面我們也寫了關于判斷是否為3的冪,最直接的判斷還是直接除啊,一直除到底;

另一種不需要循環的,我們知道,如果一個數是4的冪的話,肯定也是2的冪,所以我們可以縮小范圍去做,于是就有了

Math.pow(2,31)%n===0

大家都知道二項式定理:

這里可以拆分成:(3+1)^n?,?\sum_{k=0}^{n}??_{n}^{k}\textrm{C}?3^{n-k}

是不是變成了模3

。。。持續更新

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

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

相關文章

七大排序算法全解析:從入門到精通

目錄 一.排序的概念 二.常見排序算法的實現 2.1 插入排序 &#xff08;1&#xff09;直接插入排序&#xff1a; 當插入第i(i>1)個元素時&#xff0c;前面的array[0],array[1],…,array[i-1]已經排好序&#xff0c;此時用array[i]的排序碼與array[i-1],array[i-2],…的排序…

20250814在榮品RD-RK3588開發板的Android13下解決卡迪的LCD屏在開機的時候brightness最暗【背光的pwm信號的極性反了】

20250814在榮品RD-RK3588開發板的Android13下解決卡迪的LCD屏在開機的時候brightness最暗【背光的pwm信號的極性反了】 2025/8/14 11:33緣起&#xff1a;在榮品RD-RK3588開發板的Android13下&#xff0c;卡迪的LCD屏在開機的時候很暗&#xff0c;幾乎看不見。 在命令行查看亮度…

Flink的狀態管理

一、狀態的概念Flink的狀態其實你就可以將其想象為中間結果就可以了。在Flink中&#xff0c;算子的任務可以分為無狀態和有狀態兩種情況。無狀態算子任務在計算過程中是不依賴于其他數據的&#xff0c;只根據當前的輸入數據就可以得到結果輸出。比如之前講到的Map、FlatMap、Fi…

GoLand 項目從 0 到 1:第八天 ——GORM 命名策略陷阱與 Go 項目啟動慢問題攻堅

第八天核心任務&#xff1a;解決開發中的兩大技術卡點今天的開發不僅聚焦于代碼層面的數據庫字段映射問題&#xff0c;還遭遇了一個困擾團隊許久的環境難題 ——Go 項目啟動異常緩慢。經過多維度排查&#xff0c;我們不僅理清了 GORM 命名策略的設計邏輯&#xff0c;還找到了影…

在Ubuntu上安裝Google Chrome的詳細教程

步驟 1&#xff1a;下載 Google Chrome 安裝包 打開瀏覽器輸入https://www.google.cn/chrome/&#xff0c;然后進入Chrome瀏覽器官方網站 點擊下載選擇Debian/Ubuntu版本 google-chrome-stable_current_amd64.deb步驟 2&#xff1a;安裝下載的.deb 包 sudo dpkg -i google-chro…

el-table合并相同名稱的行

el-table合并相同名稱的行 <template><el-table:data"tableData":span-method"objectSpanMethod"border><el-table-columnprop"name"label"名稱"width"180"></el-table-column><el-table-column…

解決 VSCode 無法從右鍵菜單“通過 Code 打開”文件夾的問題

&#x1f9e9; 一、問題現象 VSCode 已安裝&#xff0c;但右鍵文件夾/桌面空白處無“通過 Code 打開在 VSCode 中執行 Shell Command: Install ‘Open with Code’ 無反應手動添加后菜單顯示亂碼&#xff08;如 €?? Code ‰“€&#xff09;點擊右鍵菜單無響應或提示“找不到…

服務器數據恢復—服務器硬盤狀態燈變紅,分區數據恢復過程

服務器數據恢復環境&故障&#xff1a; 某公司服務器上有一組由3塊硬盤組建的raid5磁盤陣列。 服務器上1塊硬盤的狀態燈變為紅色&#xff0c;磁盤陣列出現故障&#xff0c;分區無法識別。服務器數據恢復過程&#xff1a; 1、將故障服務器上所有磁盤編號后取出。經過初檢&…

MySQL → SQL → DDL → 表操作 → 數據類型 知識鏈整理成一份系統的內容

1. 知識結構MySQL└── SQL&#xff08;結構化查詢語言&#xff09;├── DDL&#xff08;數據定義語言&#xff09; → 定義結構│ ├── 表操作&#xff08;創建/修改/刪除表&#xff09;│ └── 數據類型&#xff08;列字段類型定義&#xff09;├── DML&…

基于 gRPC 的接口設計、性能優化與生產實踐

gRPC 是一種高性能、跨語言的遠程過程調用&#xff08;RPC&#xff09;框架&#xff0c;由 Google 開發&#xff0c;基于 HTTP/2 協議和 Protocol Buffers&#xff08;Protobuf&#xff09;序列化機制&#xff0c;廣泛應用于微服務架構和分布式系統中。本文將深入解析 gRPC 的底…

如何回答研究過MQ的源碼嗎

?一、核心回答框架&#xff08;由淺入深&#xff09;??1?? ?明確研究對象和深度?“我主要研究過 ??[具體MQ名稱&#xff0c;如RocketMQ/Kafka/RabbitMQ]?? 的核心模塊源碼&#xff0c;重點關注 ??[選1-2個核心方向]?? &#xff0c;比如存儲機制、網絡通信或事務…

20250815給ubuntu22.04.5的系統縮小/home分區

20250815給ubuntu22.04.5的系統縮小/home分區 2025/8/15 9:42緣起&#xff0c;聯想IdeaPad筆記本電腦&#xff0c;換了4TB的SSD固態硬盤。 WIN10和ubuntu22.04.5的雙系統。 WIN10系統&#xff1a; C盤 500GB&#xff1f; D盤 500GB&#xff1f;ubuntu22.04.5 /home分區大概 2.7…

Windows 11 首次開機引導(OOBE 階段)跳過登錄微軟賬戶,創建本地賬戶

今天重裝WIN11系統后&#xff0c;發現在首次開機引導&#xff08;OOBE 階段&#xff09;中&#xff0c;微軟默認強制聯網并登錄微軟賬戶&#xff0c;沒有的讓你注冊什么的就很煩。通過下面方法可以跳過登錄微軟賬戶&#xff0c;直接創建本地賬戶。? 方法一&#xff1a;斷網&am…

IDE:vscode的vue3模板

快捷鍵打開配置選項&#xff1a;ctrl shift p選擇配置文件&#xff1a;Snippet: Configure Snippets{// Place your snippets for vue here. Each snippet is defined under a snippet name and has a prefix, body and // description. The prefix is what is used to trigg…

C++_390_透傳功能中,使用單例模式,管理session透傳會話的生命周期,為每個會話記錄報警讀取狀態,監控會話心跳狀態,后臺線程自動清理超時會話

問題:對接板端,cvms lite 通道管理頁面,無法添加和刪除多目通道 審核:XXX 根因分析:多通道的刪除和添加需要通過eventcheck上告實現,cvms lite云走的透傳沒有eventcheck 解決辦法:云透傳加上eventcheck上告 footer: Closes: #BUG2025052701632 我幫你分兩部分解析:先解…

MIPI-csi調試

調試流程1. 硬件連線檢查數據線&#xff08;MIPI Data Lanes&#xff09; &#xff1a;確認 IMX415 模組的 4 條數據線 1 條時鐘線連接正確。如果是 4-lane 輸出&#xff0c;SoC 的 D-PHY 必須也配置成 4-lane 接收。控制線&#xff1a;原理圖IC SDA/SCL → &i2c8 控制器管…

Mysql——》提取JSON對象和數組

推薦鏈接&#xff1a; 總結——》【Java】 總結——》【Mysql】 總結——》【Redis】 總結——》【Kafka】 總結——》【Spring】 總結——》【SpringBoot】 總結——》【MyBatis、MyBatis-Plus】 總結——》【Linux】 總結——》【MongoD…

JSON值包含引號

目錄背景代碼正則說明背景 很多時候&#xff0c;在無法使用Gson等能處理非標準化JSON的工具時&#xff0c;需要對JSON值中的JSON限定符進行轉義&#xff0c;使用正則比較方便&#xff0c;以對JSON值中的引號做轉義為例 代碼 private static String escapeUnescapedQuotes(St…

後端開發Python篇

書接上回&#xff1a;後端開發技術教學(五) 魔術方法、類、序列化-CSDN博客 必要資源&#xff1a; trae中下載網址: TRAE - The Real AI Engineer phpStudy 2018 : phpStudy - Windows 一鍵部署 PHP 開發環境 小皮出品 python解釋器&#xff1a;Welcome to Python.org 前言…

Python匿名函數的具體用法

引言 在Python編程中&#xff0c;匿名函數&#xff08;即lambda函數&#xff09;是一種簡潔定義小型函數的方式。它無需通過def關鍵字命名&#xff0c;適用于需要臨時函數或作為高階函數參數的場景。本文將詳細解析lambda函數的語法、應用場景及最佳實踐。 定義與語法 官方定義…