leetcode 브러시 9 제목

오늘 발생한 문제 LeetCode (231) 질문입니다. 문제는 간단한 질문입니다, 숫자 N을 입력 할 수는 2의 거듭 제곱 아닙니다 결정하도록 요청
이진 비트 컴퓨팅을보다 효율적이기 때문에이 문제를 볼 수있는 첫 번째 생각은, 비트 연산을 사용하는 것입니다
내 자신의 솔루션 그것은 다음과 같은 코드입니다 :

공용  정적  부울 판사 ( INT의 N) {
     INT NUM = 1 ;
    부울 flage = 거짓 ;
    반면 (NUM <= N) {
         경우 (NUM == N) { 
            flage = ;
           휴식 ; 
        } 다른 { 
            NUM = NUM << 1 ; 
        } 
    } 
    반환 flage을; 
}            

그러나이 제도 N 특히 타임 아웃. 프로그램에 다른 사람의 답변에 대한 참조 후, 나는 숫자 n이 2의 거듭 제곱 인 경우, 그 수는 세 가지 조건을 충족해야합니다 발견 :

; ① 가장 이진수 다른 비트들은 0이며, 1
② 수가 마이너스의 최상위 비트가 0 중 하나, 다른 비트가 1,
③ 수가 0보다 커야
다음 때문에 위치 계산에 이용 될 수있다 :

공공 정적 부울 judge2 (INT 않음) { 
    // 경우 (N <= 0) 돌려 거짓; 
    // 창 ((N 및 N-1) == 0); 
    //或者写成
    복귀 N> 0 && (N 및 N-1) == 0; 
}

  

추천

출처www.cnblogs.com/cquer-xjtuer-lys/p/11350500.html