日期:2026年9月24日
LeetCode 題目連結:3550. Smallest Index With Digit Sum Equal to Index
解題想法
簡單題,題目一個整數陣列 $nums$,且 $0 \leq nums[i] \leq 1000$,長度小於等於 $100$,要找出 $nums$ 之中各個位數加總等於索引值的元素,如果有好幾個元素符合條件,回傳最小的索引值,如果沒有任何一個元素符合條件則回傳 $-1$。用一個 for 迴圈依序讀取每個元素,再用一個 while 迴圈或是轉成字串計算位數加總,如果位數加總等於索引值 $i$ 就回傳 $i$,不需要再跑之後的元素。如果 for 迴圈跑完還沒有找到符合條件的元素,回傳 $-1$。
Python 程式碼
Runtime: 0 ms, beats 100.00%. Memory: 19.33 MB, beats 29.46%.
class Solution:
def smallestIndex(self, nums: List[int]) -> int:
n = len(nums)
for i in range(n):
num = nums[i]
dsum = 0
while num:
dsum += num % 10
num //= 10
if dsum == i: return i
return -1
用 enumerate 比較慢。Runtime: 2 ms, beats 65.51%. Memory: 19.36 MB, beats 29.46%.
class Solution:
def smallestIndex(self, nums: List[int]) -> int:
for i, num in enumerate(nums):
dsum = 0
while num:
dsum += num % 10
num //= 10
if dsum == i: return i
return -1
轉成字串更慢。Runtime: 7 ms, beats 16.46%. Memory: 19.29 MB, beats 67.07%.
class Solution:
def smallestIndex(self, nums: List[int]) -> int:
for i, num in enumerate(nums):
dsum = sum(int(c) for c in str(num))
if dsum == i: return i
return -1
C++ 程式碼
Runtime: 0 ms, beats 100.00%. Memory: 30.94 MB, beats 52.36%.
class Solution {
public:
int smallestIndex(vector<int>& nums) {
int n = (int)nums.size();
for(int i = 0; i < n; i++) {
int dsum = 0, num = nums[i];
while(num > 0) {
dsum += num % 10;
num /= 10;
}
if (dsum == i) return i;
}
return -1;
}
};
C 語言程式碼
Runtime: 0 ms, beats 100.00%. Memory: 9.96 MB, beats 75.00%.
int smallestIndex(int* nums, int numsSize) {
for(int i = 0; i < numsSize; i++) {
int dsum = 0, num = nums[i];
while(num > 0) {
dsum += num % 10;
num /= 10;
}
if (dsum == i) return i;
}
return -1;
}
沒有留言:
張貼留言