Java不使用第三个变量来交换两个数的值
本文最后更新于43 天前,其中的信息可能已经过时,如有错误请发送邮件到PZ_0828@163.com

算术运算

public void swapData(){
    int a,b;
    a=10;b=12;
    a=b-a; //a=2;b=12
    b=b-a; //a=2;b=10
    a=b+a; //a=12;b=10
    System.out.println(a);
    System.out.println(b);
}


a=a+b;//a的值变成了a+b的和
b=a-b;//相当于a+b-b,结果就是原来a的值赋值给了b
a=a-b;//相当于a+b-a,结果就是把原来的b的值赋值给了a

交换字母

以Leetcode上的题目示例

344. 反转字符串

class Solution {
    public void reverseString(char[] s) {
        int L=0, R=s.length-1;
        while(L<R){
            s[L]=(char)(s[R]-s[L]);
            s[R]=(char)(s[R]-s[L]);
            s[L]=(char)(s[L]+s[R]);
            L++;
            R--;
        }
    }
}

位运算

此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。==这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。==

a^ b^ b=a。将a=a ^ b代入b=a^ b则得b=a^ b^ b=a;同理可以得到a=b^ a^a=b;轻松完成交换。

public void swapData2() {
    int a=10,b=12; //a=1010^b=1100;
    a=a^b; //a=0110^b=1100;
    b=a^b; //a=0110^b=1010;
    a=a^b; //a=1100=12;b=1010;

    System.out.println(a);
    System.out.println(b);

}

交换字母

同样是Leetcode上的题目

class Solution {
    public void reverseString(char[] s) {
        int L=0, R=s.length-1;
        while(L<R){
            s[L]=(char)(s[L]^s[R]);
            s[R]=(char)(s[L]^s[R]);
            s[L]=(char)(s[L]^s[R]);
            L++;
            R--;
        }
    }
}

通过栈实现

/**
* 3、栈实现
* (a = 10, b = 2) -> (a = 2, b = 10)
*/
public static void stack() {
    Stack<Integer> stack = new Stack<>();
    stack.push(a);
    stack.push(b);

    a = stack.pop();
    b = stack.pop();

    System.out.println("a:" + a + "; b:" + b);
}

参考文章: 【java】java 如何不使用第三个变量来交换两个数的值

转载请标记原作者和来源!
作者:Aex
文章:Java不使用第三个变量来交换两个数的值
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,允许非商业性使用、修改和共享。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
猫meme
上一篇
下一篇