刷題-力扣-面試題 16.01. 交換數字
阿新 • • 發佈:2022-04-16
題目連結
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/swap-numbers-lcci
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
題目描述
編寫一個函式,不用臨時變數,直接交換numbers = [a, b]中a與b的值。
示例:
輸入: numbers = [1,2]
輸出: [2,1]
提示:
- numbers.length == 2
- -2147483647 <= numbers[i] <= 2147483647
題目分析
- 根據題目描述,在不引入第三個變數的情況下交換兩個變數的值
- 假設a、b,
a=a-b;將a、b的差值付給a
b=b+a;b加上差值就是a的值
a=b-a;a減去差值就是b的值 - 對於減法運算會導致資料溢位,異或運算也可以達到想要的效果,並且不會導致資料溢位
a=a^b;
b=a^b;
a=a^b;
程式碼
class Solution { public: vector<int> swapNumbers(vector<int>& numbers) { // numbers[0] = numbers[0] - numbers[1]; // numbers[1] = numbers[1] + numbers[0]; // numbers[0] = numbers[1] - numbers[0]; numbers[0] = numbers[0]^numbers[1]; numbers[1] = numbers[0]^numbers[1]; numbers[0] = numbers[0]^numbers[1]; return numbers; } };