제목 설명
당신은 용량의 두 주전자 주어진 X 및 Y 리터. 가능한 물 공급의 무한한 양이있다. 당신은 정확하게 측정 할 수 있는지 여부를 결정해야 Z 이 두 주전자를 사용하여 리터.
경우 의 Z 리터의 물을 측정, 당신은 있어야합니다 Z 하나에 포함 리터의 물 또는 말까지 모두 버킷.
작업이 허용 :
- 완전히 물을 주전자 중 하나를 입력합니다.
- 주전자 중 하나를 비 웁니다.
- 다른 주전자까지 서로에 한 주전자에서 물을 부어 완전히 꽉 찼거나 첫 번째 주전자 자체는 비어 있습니다.
효과에 따라
두 가지 크기의 x 및 y는 각각 리터의 케틀 무제한는 용기에 물을 충전하고, 용기 내의 물이 Z를 추가 두 구현 될 수 있는지 여부를 케틀은 서로 둘 사이 부어있다.
예
E1
E2
문제 해결 아이디어
LeetCode의 @의 lblbxuxu2의 생각에 따르면, v를, 현재 획득 물의 총량을 나타내는
V + = Y를, V는 <x, 할 수있는 의미있는 작업이 때문에, 예를 채울 때
=의 X - V : V는> X, 할 수있는 감지 동작을 따라서 X가 비어있는 경우
만족 여부는 순환 V의 존재 = Z를 결정한다.
복잡도 분석
시간 복잡도 : O (N)
공간 복잡도 : O (1)
코드
클래스 해결 { 공개 : BOOL canMeasureWater ( INT (X), INT의 Y, INT의 Z) { IF (X == Y + Z) 창 에 해당하는 , IF (X + Y < Z) 창 은 false ; // 다음, X가 Y보다 작 으면 두 교환식 디지털 IF (X < Y) { INT의 TMP = X, X = Y, Y가 = TMP; } INT의 V = 0 ; 하지만 ( 1 ) { 경우 (V < X) V + = Y; 다른 V - =의 X; 경우 (V == Z)이 반환 참 ; 경우 (브이 == 0 ) 돌려 거짓 ; } } };