1. 程式人生 > 其它 >刷題-力扣-面試題 16.01. 交換數字

刷題-力扣-面試題 16.01. 交換數字

題目連結

來源:力扣(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

題目分析

  1. 根據題目描述,在不引入第三個變數的情況下交換兩個變數的值
  2. 假設a、b,
    a=a-b;將a、b的差值付給a
    b=b+a;b加上差值就是a的值
    a=b-a;a減去差值就是b的值
  3. 對於減法運算會導致資料溢位,異或運算也可以達到想要的效果,並且不會導致資料溢位
    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;
    }
};