諸神緘默不語-個人CSDN博文目錄
力扣刷題筆記
文章目錄
- 1. 簡單粗暴的遍歷
- 2. 其實也是遍歷,但是用Python內置函數只用寫一行
1. 簡單粗暴的遍歷
Python版:
class Solution:def subtractProductAndSum(self, n: int) -> int:he=0ji=1while n>=1:last_number=n%10he+=last_numberji*=last_numbern=n//10 #就是n=int(n/10)的意思return ji-he
Java版:
class Solution {public int subtractProductAndSum(int n) {int he=0;int ji=1;while(n>=1){int last_number=n%10;he+=last_number;ji*=last_number;n/=10; //我一開始寫成了n=(int)(n/10); Java的話不需要做這個轉換}return ji-he;}
}
時間復雜度: O ( log ? n ) O(\log n) O(logn)
空間復雜度: O ( 1 ) O(1) O(1)
參考ChatGPT的回答,解釋一下時間復雜度:
這個函數的目的是計算給定數字 n n n 的各個數字的乘積與和的差值。在這個過程中,你會遍歷整個數字的每一位。
時間復雜度是 O ( log ? n ) O(\log n) O(logn) 的原因是你每次迭代都會通過 n = n / / 10 n = n // 10 n=n//10 將數字的位數減少一位。因此,你將執行與數字 n n n 的位數相同的迭代次數。
現在,讓我們理解為什么數字 n n n 最多有 log ? n \log n logn 位。
給定一個 k k k 位的數字 n n n,最大值為 1 0 k ? 1 10^k-1 10k?1,最小值為 1 0 k ? 1 10^{k-1} 10k?1:
1 0 k ? 1 ≤ n < 1 0 k 10^{k-1} \leq n < 10^k 10k?1≤n<10k
取兩邊的對數,你得到:
k ? 1 ≤ log ? 10 n < k k-1 \leq \log_{10} n < k k?1≤log10?n<k
所以 k k k就是數字 n n n 的位數,它的上界是 log ? 10 n + 1 \log_{10} n+1 log10?n+1。
因此,遍歷數字 n n n 的每一位需要 O ( log ? n ) O(\log n) O(logn) 的時間。
2. 其實也是遍歷,但是用Python內置函數只用寫一行
class Solution:def subtractProductAndSum(self, n: int) -> int:return eval('*'.join(str(n))) - eval('+'.join(str(n)))