ETH官方钱包

前往
大廳
主題

LeetCode - 2169. Count Operations to Obtain Zero 解題心得

Not In My Back Yard | 2022-09-21 12:00:08 | 巴幣 0 | 人氣 181

題目連結:


題目意譯:
你被給定兩個非負整數 num1 和 num2。

在一次操作中,如果 num1 ≧ num2,你必須將 num1 減去 num2;反之,你必須將 num2 減去 num1。

例如,如果 num1 = 5 且 num2 = 4。將 num1 減去 num2 將得到 num1 = 1 且 num2 = 4。不過,如果 num1 = 4 且 num 2 = 5,在一次操作後,將得到 num1 = 4 且 num2 = 1。

回傳讓 num1 = 0 或是 num2 = 0 所需的操作數。

限制:
0 ≦ num1, num2 ≦ 10 ^ 5



範例測資:
範例 1:
輸入: num1 = 2, num2 = 3
輸出: 3
解釋:
- 操作 1:num1 = 2 、 num2 = 3。因為 num1 < num2,所以我們把 num2 減去 num1 並得到 num1 = 2 、 num2 = 3 - 2 = 1。
- 操作 2:num1 = 2 、 num2 = 1。因為 num1 > num2,所以我們把 num1 減去 num2。
- 操作 3:num1 = 1 、 num2 = 1。因為 num1 == num2,所以我們把 num1 減去 num2。
現在 num1 = 0 且 num2 = 1。因為 num1 == 0,所以我們不需要再執行任何操作。
因此總計所需操作數為 3。

範例 2:
輸入: num1 = 10, num2 = 10
輸出: 1
解釋:
- 操作 1:num1 = 10 、 num2 = 10。因為 num1 == num2,所以我們把 num1 減去 num2 並得到 num1 = 10 - 10 = 0。
現在 num1 = 0 且 num2 = 10。因為 num1 == 0,所以我們結束了。
因此總計所需操作數為 1。


解題思維:
可以看到其實本題敘述的「演算法」就是輾轉相除法(Euclidean Algorithm,參見維基)。而由於數字範圍很小,所以直接照著題目的方式做即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

追蹤 創作集

作者相關創作

更多創作