需要帮助来解决DSA:在java中查找设置位的位置

问题描述 投票:0回答:1
class Solution {
    static int findPosition(int N) {
        if((N&(N-1)) != 0) return -1;
        
        int pos = 1;
        while(N!=0){
            if((N&1) == 1){
                return pos;
            } else {
                pos++;
                N>>=1;
            }
        }
        return -1;    }
};

在这段代码中,如果 N 是 5,那么在 while 循环中,(5&1) == 1 满足条件,它应该返回 1,但代码返回 -1。请解释一下我到底在哪里缺少这个概念

algorithm data-structures bit-manipulation
1个回答
0
投票

移动

1
位比移动数字容易得多:

class Solution {
    static int findPosition(int N) {
      if((N & (N-1)) != 0) {
        return -1;
      }
      
      for(int i = 0; i < 31; i++){
        if ((N & (1 << i)) != 0){
          return i;
        }
      }

      return -1;    
    }
}

如果 N 是 5,那么在 while 循环中,(5&1) == 1 满足条件,它应该返回 1,但代码返回 -1

这是您第一次检查造成的:

if((N&(N-1)) != 0) return -1;

此代码检查您的数字是否只有一位设置为

1
,但二进制数字
5
0b101
,其中有两位设置为
1
。这就是为什么你永远不会达到你的
while
循环

© www.soinside.com 2019 - 2024. All rights reserved.