오늘 발생한 문제 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; }