当前位置:   article > 正文

程序员面试金典-0507-配对交换_交换配对

交换配对

程序员面试金典-0507-配对交换

本题是针对bit位的交换

配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。

示例1:

 输入:num = 2(或者0b10)
 输出 1 (或者 0b01)
示例2:

 输入:num = 3
 输出:3
提示:

num的范围在[0, 2^30 - 1]之间,不会发生整数溢出。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/exchange-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
int exchangeBits(int num){
    int t = num;
    int num_of_digits = 0;
    int p1=0,p2=0;
    int ret = 0;
    if(num == 0){
        return 0;
    }
    while(t!=0)
    {
        t=t/2;
        num_of_digits++;
    }
    if((num_of_digits %2 )==1){
        num_of_digits++;
    }
    int bit[num_of_digits];
    int i = 0;
    for(i=0;i<num_of_digits;i++)
        bit[i]=0;
    t = num;
    p1=num_of_digits-1;
    while(t!=0)
    {
        int temp = t%2;
        if(temp==1)
            bit[p1]=1;
        else
            bit[p1]=0;
        p1--;
        t=t>>1;
    }
    p1=0;
    p2=1;
    while(p1<num_of_digits)
    {
        int temp = bit[p1];
        bit[p1] = bit[p2];
        bit[p2] = temp;
        p1=p1+2;
        p2=p2+2;
    }
    int fac = 1;
    p1=num_of_digits-1;
    while(p1>=0){
        ret = ret+fac*bit[p1];
        fac = fac<<1;
        p1--;
    }
    return ret;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/87282
推荐阅读
相关标签
  

闽ICP备14008679号