力扣每日打卡 1922. 統計好數字的數目 (中等)

力扣 1922. 統計好數字的數目 中等

  • 前言
  • 一、題目內容
  • 二、解題方法
    • 1. 暴力解法(會超時,此法不通)
    • 2. 快速冪運算
    • 3. 組合計數的思維
      • 邏輯分析
      • 組合計數的推導
      • 例子分析
      • 思維小結論
    • 4.官方題解
      • 4.1 方法一:快速冪
  • 三、快速冪運算
    • 快速冪運算(Exponentiation by Squaring)
    • 基本思想
    • 算法實現(②③為非遞歸)
      • ① 遞歸運算
      • ② 普通 除模運算(不帶 **模數** 與 帶 **模數**)
      • ③ 按位與運算
    • 使用示例
      • 示例代碼
    • 復雜度分析
    • 小結論
  • 四、JS的大數運算
    • 1. 數字精度限制
    • 2. 大數解決方案
      • 2.1. 使用 BigInt
      • 2.2. 使用第三方庫
      • 2.3. 總結
      • 2.4 補充:本題使用大數運算的例子


前言

這是刷算法題的第十一天,用到的語言是JS
題目:力扣 1922. 統計好數字的數目 (中等)


一、題目內容

我們稱一個數字字符串是 好數字 當它滿足(下標從 0 開始)偶數 下標處的數字為 偶數 且 奇數 下標處的數字為 質數 (2,3,5 或 7)。

比方說,“2582” 是好數字,因為偶數下標處的數字(2 和 8)是偶數且奇數下標處的數字(5 和 2)為質數。但 “3245” 不是 好數字,因為 3 在偶數下標處但不是偶數。

給你一個整數 n ,請你返回長度為 n 且為好數字的數字字符串 總數 。由于答案可能會很大,請你將它對 109 + 7 取余后返回 。

一個 數字字符串 是每一位都由 0 到 9 組成的字符串,且可能包含前導 0 。

示例 1:
輸入:n = 1
輸出:5
解釋:長度為 1 的好數字包括 “0”,“2”,“4”,“6”,“8” 。

示例 2:
輸入:n = 4
輸出:400

示例 3:
輸入:n = 50
輸出:564908303

提示:
1 <= n <= 1015

二、解題方法

1. 暴力解法(會超時,此法不通)

  1. 遍歷所有長度為n的數字字符串,判斷是否為好數字
  2. 好數字的偶數下標處的數字為偶數且奇數下標處的數字為質數
  3. 時間復雜度為O(n),空間復雜度為O(1)
  4. 由于n的范圍較大,暴力解法會超時,所以需要優化

代碼如下(實例):

*** @param {number} n* @return {number}*/
var countGoodNumbers = function (n) {// 暴力解法let count = 0for(let i = 0; i.toString().length <= n; i++) {if (i.toString().length === n) {const si = i.toString() // 將數字轉換為字符串if (si.length > n) returnfor (let j = 0; j < si.length; j++) {let access = false  // 如果每一位數字都通過,則數量+1if (j % 2 === 0 && si[j] % 2 === 0) access = trueelse breakif( j > 10 ) {if (j % 2 && (si[j] % 2 === 2 || si[j] % 2 === 3 || si[j] % 2 === 5 || si[j] % 2 === 7)) access = trueelse break}if (access) count++}}}return count % (10 ** 9 + 7)
}// console.log(countGoodNumbers(1)) // 5 正確,也會打印,但也僅此而已
// console.log(countGoodNumbers(8)) // 40000000 正確,也會打印,但也僅此而已
// console.log(countGoodNumbers(9)) // 400000000正確,但是不會打印,可能直接超時了,或者打印時間非常慢

2. 快速冪運算

涉及到JS的 大數運算(關于大數運算的補充在下面有)

代碼如下(示例):(使用了JS的 大數運算

/*** @param {number} n* @return {number}*/
var countGoodNumbers = function (n) {// 此題無法使用暴力算法const MOD = BigInt(10 ** 9 + 7)// ai得到的邏輯思維:// 一個長度為n的字符串,偶數位置可以有02468五種選擇,奇數位置可以有2357四種選擇// 因此對其進行排列組合,可以得到好數字的個數一共是 (符合偶數位置的數字的個數 * 符合奇數位置的數字的個數)// 即 (5^evenFuhe) * (4^oddFuhe)const evenCount = BigInt(Math.ceil(n / 2)) // 偶數下標的數量const oddCount = BigInt(Math.floor(n / 2)) // 奇數下標的數量const count = (Fuhe(5n, evenCount, MOD) * Fuhe(4n, oddCount, MOD)) % MODreturn Number(count)
}// 快速冪運算的函數實現
const Fuhe = ( a, b, mod ) => {let ans = 1na = a % modwhile(b) {if( b & 1n) ans = (a * ans) % moda = (a * a) % modb >>= 1n}return ans
}

代碼:(下面的代碼沒有使用JS的 大數運算,會出現精準度問題)

/*** @param {number} n* @return {number}*/
var countGoodNumbers2 = function (n) {// 此題無法使用暴力算法const MOD = 10 ** 9 + 7// ai得到的邏輯思維:// 一個長度為n的字符串,偶數位置可以有02468五種選擇,奇數位置可以有2357四種選擇// 因此對其進行排列組合,可以得到好數字的個數一共是 (符合偶數位置的數字的個數 * 符合奇數位置的數字的個數)// 即 (5^evenFuhe) * (4^oddFuhe)const evenCount = Math.ceil(n / 2) // 偶數下標的數量const oddCount = Math.floor(n / 2) // 奇數下標的數量const count = (Fuhe(5, evenCount, MOD) * Fuhe(4, oddCount, MOD)) % MODreturn count
}
const Fuhe = ( a, b, mod ) => {let ans = 1a = a % modwhile(b) {if( b & 1) ans = (a * ans) % moda = (a * a) % modb >>= 1// b = Math.floor(b / 2) }return ans
}
console.log(countGoodNumbers2(50)) // 應該是564908303,而非564908313,但是打印的是564908313

3. 組合計數的思維

理解這個問題的數學思維需要我們從組合計數的角度出發,分析如何在特定的約束下選擇數字字符串。以下是分析的詳解:

邏輯分析

  1. 字符串結構:

    • 我們需要生成的字符串長度為 ( n )。
    • 字符串的下標為 ( 0 ) 到 ( n-1 )。
  2. 下標分類

    • 偶數下標(如 0, 2, 4, …)和奇數下標(如 1, 3, 5, …)之間有不同的限制條件。
    • 偶數下標位置的數字必須是偶數。
    • 奇數下標位置的數字必須是質數。
  3. 可能的選項

    • 偶數的選擇: 偶數下標的位置可以選擇的數字有 0, 2, 4, 6, 8,共 5 種選擇。
    • 質數的選擇: 奇數下標的位置可以選擇的質數有 2, 3, 5, 7,共 4 種選擇。

組合計數的推導

  1. 偶數下標的數量:

    • 在一個長度為 ( n ) 的字符串中,偶數下標的數量可以通過 evenCount = ?n / 2?計算得出。
      • 這表示當 ( n ) 為奇數時,偶數下標數量會比奇數下標數量多 1。
  2. 奇數下標的數量:

    • 奇數下標的數量可以通過 oddCount = ? n / 2 ?計算得出。
      • 這表示當 ( n ) 為偶數時,偶數下標和奇數下標數量相等。
  3. 總組合數的計算:

    • 對于每一個偶數下標,我們有 5 種選擇(偶數)。
    • 對于每一個奇數下標,我們有 4 種選擇(質數)。
    • 最終的好數字字符串數量可以通過將偶數下標的選擇和奇數下標的選擇相乘得到:
      goodNumbers = 5evenCount × 4oddCount

例子分析

假設 ( n = 4 ):

  • 字符串有長度 4,下標為 0, 1, 2, 3。
  • 偶數下標(0 和 2): 2 個位置,每個位置可以選擇【0, 2, 4, 6, 8】中的任意一個,即 5 種選擇。
  • 奇數下標(1 和 3): 2 個位置,每個位置可以選擇【2, 3, 5, 7】中的任意一個,即 4 種選擇。

因此,字符串的組合數是:
goodNumbers = 52 × 42 = 25 × 16 = 400

思維小結論

通過這樣的數學推理,我們能夠清楚地理解在給定的條件下,為什么能夠將問題轉換為計算選項的排列組合。在面對其他類似的問題時,這種分解和組合的思維方式可以幫助我們有效解決復雜問題。


4.官方題解

4.1 方法一:快速冪

思路與算法:
對于偶數下標處的數字,它可以為 0,2,4,6,8 共計 5 種,而長度為 n 的數字字符串有 ? n+1 / 2 ? 個偶數下標,其中 ?x? 表示對 x 向下取整。

對于奇數下標處的數字,它可以為 2,3,5,7 共計 4 種,而長度為 n 的數字字符串有 ? n / 2 ? 個奇數下標。

因此長度為 n 的數字字符串中,好數字的總數即為:
5^? n+1 / 2 ?^ ? 4^? n / 2 ?^
在本題中,由于 n 的取值最大可以到 1015,如果通過普通的乘法運算直接求出上式中的冪,會超出時間限制,因此我們需要使用快速冪算法對冪的求值進行優化。

快速冪算法可以參考「50. Pow(x, n)」的官方題解。

代碼如下(示例):

var countGoodNumbers = function(n) {const mod = 1000000007n;// 快速冪求出 x^y % modfunction quickmul(x, y) {let ret = 1n;let mul = x;while (y > 0) {if (y % 2n === 1n) {ret = (ret * mul) % mod;}mul = (mul * mul) % mod;y = y / 2n;}return ret;}return Number(quickmul(5n, BigInt(n + 1) / 2n) * quickmul(4n, BigInt(n) / 2n) % mod);
};作者:力扣官方題解
鏈接:https://leetcode.cn/problems/count-good-numbers/solutions/857968/tong-ji-hao-shu-zi-de-shu-mu-by-leetcode-53jj/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
復雜度分析:
時間復雜度:O(log n)。
空間復雜度:O(1)。

鏈接:力扣本題官方題解
來源:力扣(LeetCode)

三、快速冪運算

快速冪運算(Exponentiation by Squaring)

快速冪運算是一種高效計算 ( b^e ) 的算法,其中 ( b ) 是基數,( e ) 是指數。傳統的逐步乘法方法的時間復雜度為 ( O(e) ),而快速冪運算的時間復雜度為 ( O(\log e) ),因此在處理大數時特別有效。

基本思想

快速冪運算的基本思想是利用平方和乘法來減少乘法的次數。其主要依據是:

  • 如果指數 ( e ) 為偶數,則 ( b^e = (b{e/2})2 )
  • 如果指數 ( e ) 為奇數,則 ( b^e = b \times b^{e-1} )

通過這種方式,可以在每次迭代中將指數減半,從而顯著降低計算時間。

算法實現(②③為非遞歸)

以下是使用 JavaScript 實現的快速冪運算的代碼:

① 遞歸運算

/**  不帶模數* 快速冪運算* @param {number} base - 基數* @param {number} exp - 指數* @returns {number} */
function quickPow(base, exp) {if (exp === 0) {return 1; // 任何數的零次方為 1}if (exp % 2 === 0) {const half = quickPow(base, exp / 2);return half * half;} else {return base * quickPow(base, exp - 1);}
}

② 普通 除模運算(不帶 模數 與 帶 模數

/** 不帶模數* 快速冪運算* @param {number} a- 基數* @param {number} b- 指數* @returns {number} 計算結果 (a ^ b)*/
function quick (a, b) {let ans = 1while(b) { // 當指數存在的時候// 如果指數是奇數,則要先拉出來一個底數乘到最終結果上,其余步驟和偶數一樣操作// 如果指數是偶數,則要底數平方,指數除以2(如果是使用按位與運算,則使用 "b >>= 1")b/2if(b % 2 === 1) ans *= aa *= ab = Math.floor(b / 2) // 注意一定要使用Math.floor(),否則會出現小數點,導致結束循環}return ans
}
console.log(quick(2, 7)) // 128/**  帶模數* 快速冪運算* @param {number} base - 基數* @param {number} exp - 指數* @param {number} mod - 模數* @returns {number} 計算結果 (base^exp) % mod*/
const modExp = (base, exp, mod) => {let result = 1; // 初始化結果為 1base = base % mod; // 將基數在模數下取值while (exp > 0) {// 如果 exp 為奇數,將當前的 base 乘入結果if (exp % 2 === 1)  result = (result * base) % mod;// 將 base 平方base = (base * base) % mod;// exp 右移,相當于整除 2exp = Math.floor(exp / 2);}return result; // 返回最終結果
}

③ 按位與運算

/** 不帶模數* 快速冪運算* @param {number} a- 基數* @param {number} b- 指數* @returns {number} 計算結果 (a ^ b)*
function quick2 (a, b) {let ans = 1while(b) { // 當指數存在的時候// 如果指數是奇數,則要先拉出來一個底數乘到最終結果上,其余步驟和偶數一樣操作// 如果指數是偶數,則要底數平方,指數除以2(如果是使用按位與運算,則使用 "b >>= 1")b/2if(b & 1) ans *= aa *= ab >>= 1 // b右移一位}return ans
}
console.log(quick2(2, 8)) // 256

使用示例

快速冪運算可以用于很多應用場景,包括計算大數的冪、加密算法、以及任何需要快速計算大數時。

示例代碼

const MOD = 10 ** 9 + 7; // 定義模數console.log(modExp(2, 10, MOD)); // 輸出: 1024
console.log(modExp(5, 3, MOD));  // 輸出: 125
console.log(modExp(3, 7, MOD));  // 輸出: 2187
console.log(modExp(10, 9, MOD)); // 輸出: 1000000000

復雜度分析

  • 時間復雜度: ( O(log e) ) — 每次操作將指數減半。
  • 空間復雜度: ( O(1) ) — 僅使用常量級額外空間。

小結論

快速冪運算是一個非常實用且高效的算法,廣泛應用于計算大數的冪以及各種算法中。了解并實現該算法可以顯著提高程序運行效率,特別是在處理與模數運算相關的問題時。


四、JS的大數運算

JavaScript 在處理數字時,其默認的數值類型是基于 IEEE 754 標準的雙精度浮點數。這個數值類型有一些限制,特別是在進行大數運算時。以下是 JavaScript 中大數運算的簡單介紹:

1. 數字精度限制

  • 安全整數: JavaScript 支持的安全整數范圍是 (-2^{53} + 1) 到 (2^{53} - 1)(即 Number.MAX_SAFE_INTEGER 的值為 9007199254740991)。超出這個范圍的整數計算可能會出現精度丟失(例如, 9007199254740992 會變成 9007199254740992)。

  • 浮點數問題: 由于浮點數的表示方式,某些小數(如 0.10.2 的和)可能無法精確表示。

2. 大數解決方案

由于上述限制,處理大數運算時,可以考慮以下幾種方案:

2.1. 使用 BigInt

從 ES2020 開始,JavaScript 引入了 BigInt 類型,用于表示任意大小的整數。你可以通過在數字后添加 “n” 來創建 BigInt:

const bigInt1 = BigInt(9007199254740992)
const bigInt2 = 12345678901234567890n // 后綴 "n" 表示 BigInt
const sum = bigInt1 + bigInt2         // 可以進行大數運算
console.log(sum)                       // 輸出: 12345678901234567892nconsole.log(Number(sum))  // 輸出: 12345678901234567892

2.2. 使用第三方庫

如果你需要支持比 BigInt 更廣泛的數值(比如更復雜的數學操作、浮點數等),可以使用大數運算庫,例如:

  • Decimal.js: 支持任意精度的十進制運算,適合處理小數。
  • Big.js: 提供了對大浮點數的高精度運算支持。
  • bignumber.js: 可以處理比較大的數值以及高精度的浮點數運算。

使用示例(以 decimal.js 為例):

const Decimal = require('decimal.js');const a = new Decimal(0.1);
const b = new Decimal(0.2);
const sum = a.plus(b); // 精確計算
console.log(sum.toString()); // 輸出: "0.3"

2.3. 總結

在 JavaScript 中,大數運算可以通過 BigInt 來實現任意大小的整數計算,或使用第三方庫來處理更復雜的場景(如浮點數和高精度計算)。在處理大數運算時,需要注意原生數值類型的限制,以確保計算的準確性。

2.4 補充:本題使用大數運算的例子

代碼如下:

/*** @param {number} n* @return {number}*/
var countGoodNumbers = function (n) {// 此題無法使用暴力算法const MOD = BigInt(10 ** 9 + 7)// ai得到的邏輯思維:// 一個長度為n的字符串,偶數位置可以有02468五種選擇,奇數位置可以有2357四種選擇// 因此對其進行排列組合,可以得到好數字的個數一共是 (符合偶數位置的數字的個數 * 符合奇數位置的數字的個數)// 即 (5^evenFuhe) * (4^oddFuhe)const evenCount = BigInt(Math.ceil(n / 2)) // 偶數下標的數量const oddCount = BigInt(Math.floor(n / 2)) // 奇數下標的數量const count = (Fuhe(5n, evenCount, MOD) * Fuhe(4n, oddCount, MOD)) % MODreturn Number(count)
}// 快速冪運算的函數實現
const Fuhe = ( a, b, mod ) => {let ans = 1na = a % modwhile(b) {if( b & 1n) ans = (a * ans) % moda = (a * a) % modb >>= 1n}return ans
}

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

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

相關文章

如何使用通義靈碼玩轉Docker - AI助手提升開發效率

一、引言 Docker 作為一種流行的虛擬化技術&#xff0c;能夠幫助開發者快速搭建所需的運行環境。然而&#xff0c;對于初學者來說&#xff0c;掌握 Docker 的基本概念和使用方法可能會遇到一些挑戰。本文將介紹如何利用通義靈碼這一智能編碼助手&#xff0c;幫助你更高效地學習…

從一到無窮大 #45:InfluxDB MCP Server 構建:從工程實踐到價值重構

本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。 本作品 (李兆龍 博文, 由 李兆龍 創作)&#xff0c;由 李兆龍 確認&#xff0c;轉載請注明版權。 文章目錄 工程實踐遇到的問題MCP Host選擇開發流程 結果展現可能性展望工作生活帶來的變化 MCP…

JAVA SDK通過proxy對接google: GCS/FCM

前言&#xff1a;因為國內調用google相關api需要通過代理訪問(不想設置全局代理)&#xff0c;所以在代理這里經常遇到問題&#xff0c;先說一下結論 GCS 需要設置全局代理或自定義代理選擇器&#xff0c; FCM sdk admin 在初始化firebaseApp時是支持設置的。 GCS: 開始時嘗試在…

【NLP】24. spaCy 教程:自然語言處理核心操作指南(進階)

spaCy 中文教程&#xff1a;自然語言處理核心操作指南&#xff08;進階&#xff09; 1. 識別文本中帶有“百分號”的數字 import spacy# 創建一個空的英文語言模型 nlp spacy.blank("en")# 處理輸入文本 doc nlp("In 1990, more than 60% of people in East…

關于香橙派OrangePi 5 Ultra 這個開源板子,開發Android

我下載了它資料中的開源Android13 系統SDK&#xff0c; 這個SDK連個git 都沒有&#xff0c;把這種代碼釋放能稱為開源嗎&#xff1f;&#xff1f; 并且也就是說你買了這個板子&#xff0c;里面是沒有任何關于RK3588的開發文檔&#xff0c;如果你沒玩過其他RK平臺&#xff0c;估…

WHAT - React Portal 機制:將子組件渲染到 DOM 的指定節點

文章目錄 適合場景基本語法示例&#xff1a;Modal 彈窗1. 創建一個簡單的 Modal.tsx2. 在 App 中使用 為什么要用 Portal&#xff1f;TypeScript 中 Portal 類型定義&#xff1f; 適合場景 React Portal 是 React 提供的一種機制&#xff0c;讓你可以將子組件渲染到 DOM 的指定…

數據結構---跳表

目錄 一、跳表的概念 為什么要使用隨機值來確定層高 二、跳表的分析 &#xff08;1&#xff09;查找過程 &#xff08;2&#xff09;性能分析 三、跳表的實現 四、與紅黑樹哈希表的對比 skiplist本質上也是一種查找結構&#xff0c;用于解決算法中的查找問題&#xff0c…

PCDN通過個人路由器,用更靠近用戶的節點來分發內容,從而達到更快地網絡反應速度

PCDN&#xff08;P2P CDN&#xff09;的核心思想正是利用個人路由器、家庭寬帶設備等分布式邊緣節點&#xff0c;通過就近分發內容來降低延遲、提升網絡響應速度&#xff0c;同時降低傳統CDN的帶寬成本。以下是其技術原理和優勢的詳細分析&#xff1a; 1. 為什么PCDN能更快&…

用excel做九乘九乘法表

公式&#xff1a; IF($A2>B 1 , 1, 1,A2 & “" & B$1 & “” & $A2B$1,”")

凡泰極客亮相QCon2025鴻蒙專場,解析FinClip“技術+生態”雙引擎

2025年4月10日&#xff0c;備受矚目的QCon開發者技術峰會盛大舉行&#xff0c;本次活動開設鴻蒙專場以“HarmonyOS NEXT 創新特性與行業實踐”為主題&#xff0c;匯聚了眾多鴻蒙生態的領軍人物與技術專家&#xff0c;共同探討鴻蒙操作系統的技術創新與行業應用。 凡泰極客CTO徐…

java HttpServletRequest 和 HttpServletResponse

HttpServletRequest 和 HttpServletResponse 詳解 1. HttpServletRequest&#xff08;HTTP 請求對象&#xff09; HttpServletRequest 是 Java Servlet API 提供的接口&#xff0c;用于封裝客戶端的 HTTP 請求信息。它繼承自 ServletRequest&#xff0c;并增加了 HTTP 協議相…

HAL TIM PWM產生 藍橋杯

目錄 0.原理 0.1 CNT和CCR關系 0.2 PWM模式1模式2 1. cubemx配置 需求(將PA1輸出1Khz的 50&#xff05;占空比的方波) 1.0 PWM的頻率計算: 2.代碼 0.原理 0.1 CNT和CCR關系 CNT計數器和CCR比較器進行比較,如果是向上計數,CNT逐漸增加,CCR是虛線位置,也是用戶自定義的…

python入門:簡單介紹和python和pycharm軟件安裝/學習網址/pycharm設置(改成中文界面,主題,新建文件)

Python 目前是 AI 開發的首選語言 軟件安裝 python解釋器 官網下載 Python |Python.org 勾選 Add python.exe to PATH 將python.exe添加到PATH 勾選這個選項會將Python的可執行文件路徑添加到系統的環境變量PATH中。這樣做的好處是&#xff0c;你可以在命令行中從任何位置直…

CMD命令行筆記

CMD命令行筆記&#xff0c;涵蓋常用命令及實用技巧&#xff0c;適合快速查閱&#xff1a; 一、基礎操作 打開CMD Win R → 輸入 cmd → 回車管理員模式&#xff1a;右鍵開始菜單 → 選擇“命令提示符&#xff08;管理員&#xff09;” 常用命令 help&#xff1a;查看所有命令…

android中dp和px的關系

關于android的dp和px的關系是我剛開始學習android的第一個知識點&#xff0c;不知不覺學安卓也有一年了&#xff0c;但是偶然間我發現我理解的dp和px的關系一直是錯的&#xff0c;真的是有一點搞笑&#xff0c;今天特意寫一篇博客紀念一下這個我理解錯一年的知識點。 dp和px之間…

(四)機器學習---邏輯回歸及其Python實現

之前我們提到了常見的任務和算法&#xff0c;本篇我們使用邏輯回歸來進行分類 分類問題回歸問題聚類問題各種復雜問題決策樹√線性回歸√K-means√神經網絡√邏輯回歸√嶺回歸密度聚類深度學習√集成學習√Lasso回歸譜聚類條件隨機場貝葉斯層次聚類隱馬爾可夫模型支持向量機高…

【汽車產品開發項目管理——端到端的汽車產品誕生流程】

MPU&#xff1a;集成運算器、寄存器和控制器的中央處理器芯片 MCU&#xff1a;微控制單元&#xff0c;將中央處理器CPU、存儲器ROM/RAM、計數器、IO接口及多種外設模塊集成在單一芯片上的微型計算機系統。 汽車產品開發項目屬性&#xff1a;臨時性、獨特性、漸進明細性、以目標…

Python將不能修改的值稱為不可變的 ,而不可變的列表被稱為元組------元組

列表非常適合用于存儲在程序運行期間可能變化的數據集。列表是可以修改的&#xff0c;這對處理網站的用戶列表或游戲中的角色列表至關重要。然而&#xff0c;有時候你需要創建一系列不可修改的元素&#xff0c;元組可以滿足這種需求。Python將不能修改的值稱為不可變的&#xf…

智慧醫院室內導航系統架構拆解:技術選型與性能攻堅指南

本文面向醫院信息化團隊技術負責人及醫療IoT解決方案開發者&#xff0c;聚焦解決大規模院區導航系統的擴展性、多源數據融合及實時路徑規劃等技術難點&#xff0c;提供從架構到落地的完整技術路線圖。 如需獲取智慧醫院導航導診系統解決方案請前往文章最下方獲取&#xff0c;如…

醫藥采購系統平臺第4天03:實現根據用戶的角色顯示不同用戶的權限菜單編寫攔截器實現權限攔截模塊的開發流程和測試流程小節

如果想要獲取相關的源碼,筆記,和相關工具,對項目需求的二次開發,可以關注我并私信!!! 四 權限管理(用戶授權)的應用:根據用戶的角色顯示不同用戶的權限菜單 經過上面的與第三方系統的成功的接入,而且在“角色管理”菜單中也對需要授權的角色進行了授權--->給一級…