991. Broken Calculator

LeetCode medium original: C# #backtracking #csharp #leetcode #medium
選択した UI 言語に合わせて問題文をロシア語から翻訳します。コードは変更しません。

Имеется неисправный калькулятор, на экране которого изначально отображается 整数 startValue. За одну операцию можно:

Умножить number на экране на 2, или

Вычесть 1 из числа на экране.

given два целых числа startValue и target. return минимальное количество операций, необходимых для отображения target на калькуляторе.

Input: startValue = 2, target = 3

Output: 2

Explanation: Use double operation and then decrement operation {2 -> 4 -> 3}.

C# 解法

照合済み/オリジナル
public class Solution {
    public int BrokenCalc(int startValue, int target) {
        int operations = 0;
        
        while (target > startValue) {
            operations++;
            if (target % 2 == 0) {
                target /= 2;
            } else {
                target += 1;
            }
        }
        
        return operations + (startValue - target);
    }
}

C++ 解法

自動ドラフト、提出前に確認
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public int BrokenCalc(int startValue, int target) {
        int operations = 0;
        
        while (target > startValue) {
            operations++;
            if (target % 2 == 0) {
                target /= 2;
            } else {
                target += 1;
            }
        }
        
        return operations + (startValue - target);
    }
}

Java 解法

照合済み/オリジナル
public class Solution {
    public int brokenCalc(int startValue, int target) {
        int operations = 0;
        
        while (target > startValue) {
            operations++;
            if (target % 2 == 0) {
                target /= 2;
            } else {
                target += 1;
            }
        }
        
        return operations + (startValue - target);
    }
}

JavaScript 解法

照合済み/オリジナル
var brokenCalc = function(startValue, target) {
    let operations = 0;
    
    while (target > startValue) {
        operations++;
        if (target % 2 === 0) {
            target /= 2;
        } else {
            target += 1;
        }
    }
    
    return operations + (startValue - target);
};

Python 解法

照合済み/オリジナル
class Solution:
    def brokenCalc(self, startValue: int, target: int) -> int:
        operations = 0
        
        while target > startValue:
            operations += 1
            if target % 2 == 0:
                target //= 2
            else:
                target += 1
                
        return operations + (startValue - target)

Go 解法

照合済み/オリジナル
func brokenCalc(startValue int, target int) int {
    operations := 0
    
    for target > startValue {
        operations++
        if target % 2 == 0 {
            target /= 2
        } else {
            target++
        }
    }
    
    return operations + (startValue - target)
}

Algorithm

Обратный путь:

Если target больше startValue, то попытайтесь уменьшить target, чтобы привести его к startValue.

Если target четный, разделите его на 2, иначе прибавьте 1.

Подсчет операций:

Повторяйте шаги, пока target не станет меньше или равен startValue.

После этого вычитайте из startValue оставшееся значение target.

Возврат результата:

Возвращайте суммарное количество выполненных операций.

😎

Vacancies for this task

有効な求人 with overlapping task tags are 表示.

すべての求人
有効な求人はまだありません。