leetcode 991. 깨진 계산기(파이썬)

제안이 도착했습니다. 친구를 찾아 픽업하세요! 2022년 봄학기 채용 체크인 이벤트에 참여하고 있습니다. 자세한 이벤트 내용 을 보려면 클릭하세요.

설명하다

처음에 디스플레이에 정수 startValue가 있는 깨진 계산기가 있습니다. 한 번의 작업으로 다음을 수행할 수 있습니다.

  • 표시된 숫자에 2를 곱하거나
  • 표시된 숫자에서 1을 뺍니다.

두 개의 정수 startValue와 target이 주어지면 계산기에 target을 표시하는 데 필요한 최소 연산 수를 반환합니다.

예 1:

Input: startValue = 2, target = 3
Output: 2
Explanation: Use double operation and then decrement operation {2 -> 4 -> 3}.
复制代码

메모:

1 <= x, y <= 10^9

구문 분석

질문에 따르면 처음에 디스플레이에 정수 startValue를 표시하는 깨진 계산기가 있습니다. 한 번에 다음 중 하나만 수행할 수 있습니다.

  • 표시된 숫자에 2를 곱하거나
  • 표시된 숫자에서 1을 뺍니다.

두 개의 정수 startValue와 target이 주어지면 계산기에 target을 표시하는 데 필요한 최소 작업 수를 반환합니다.

이런 종류의 질문을 살펴보는 것은 욕심쟁이 알고리즘을 조사하는 것이어야 합니다. 우리는 startValue에서 target까지의 최소 연산 수를 보장하기 위해 2를 곱하고 1을 빼는 연산만 수행할 수 있습니다. 2를 곱하면 확실히 감소할 수 있음을 압니다. 연산 수가 상당히 많기 때문에 최대한 2의 곱셈을 사용하려고 하고, 일반적인 생각은 이렇지만 역연산이 이해하기 더 쉽다고 생각합니다(개인 취향). 그래서 target에서 startValue로 바꿔서 할 수 있습니다. 2로 나누고 1을 더하십시오.

루프에서 target의 크기를 지속적으로 조정하여 startValue와 같게 만들기만 하면 됩니다. 각 주기 동안 목표가 홀수인 경우 목표에 1을 더하고(2로 나누기 위해 짝수가 되도록) 계산을 위해 결과에 1을 더해야 한다고 판단합니다. 이때 target이 startValue보다 크면 target을 직접 2로 나누어 그 결과에 1을 더하여 count하고, 그렇지 않으면 target이 startValue보다 작으면 결과에 차를 더한 값(startValue - target) 카운트한 다음 target 카운트 startValue로 변경할 수 있습니다. 루프가 끝나면 결과로 직접 돌아갑니다.

시간 복잡도는 O(logtarget)이고 공간 복잡도는 O(1)입니다.

답변

class Solution(object):
    def brokenCalc(self, startValue, target):
        result = 0
        while target != startValue:
            if target % 2:
                target += 1
                result += 1
            if target > startValue:
                target //= 2
                result += 1
            else:
                result += (startValue - target)
                target = startValue
        return result	
复制代码

작업 결과

Runtime: 19 ms, faster than 87.50% of Python online submissions for Broken Calculator.
Memory Usage: 13.4 MB, less than 75.00% of Python online submissions for Broken Calculator.
复制代码

원본 제목 링크

leetcode.com/problems/br…

당신의 지원은 나의 가장 큰 동기입니다

추천

출처juejin.im/post/7078459144117682206