LeetCode1342。数値を0に変換する操作の数効率が2倍になる複数のソリューションC / C ++ / Java / Python

LeetCode1342。数値を0に変換する操作の数効率が2倍になる複数のソリューションC / C ++ / Java / Python

  みなさんこんにちは、私の名前は公式チー傑(チー関傑)、CSDN、時間のハエにおけるビットの学習コースレコードによってビットで、将来が期待できる、〜のブログのアドレスを加速することである:チー傑の公式ブログ

この記事はQi Guanが最初に書いたものです。サポートしてください。一部のプラットフォームでは、ブロガーの記事が盗まれています。

現在、ブロガーはCSDNでのみブログを作成しており、ブログの更新アドレスは次のとおりです。QiGuanjieのブログ


タイトル

単純な難しさ

負でない整数numを指定してください。それを0にするために必要なステップ数を返してください。現在の数が偶数の場合は2で割り、それ以外の場合は1を引きます。

例1:

输入:num = 14
输出:6
解释:
步骤 1) 14 是偶数,除以 2 得到 7 。
步骤 2) 7 是奇数,减 1 得到 6 。
步骤 3) 6 是偶数,除以 2 得到 3 。
步骤 4) 3 是奇数,减 1 得到 2 。
步骤 5) 2 是偶数,除以 2 得到 1 。
步骤 6) 1 是奇数,减 1 得到 0 。

例2:

输入:num = 8
输出:4
解释:
步骤 1) 8 是偶数,除以 2 得到 4 。
步骤 2) 4 是偶数,除以 2 得到 2 。
步骤 3) 2 是偶数,除以 2 得到 1 。
步骤 4) 1 是奇数,减 1 得到 0 。

例3:

输入:num = 123
输出:12

ヒント:

  • 0 <= num <= 10^6

ソリューション1:C / C ++ソリューション

  数値を入力して、この数値を1にするために必要な回数を見つけてください。変更のルールは次のとおりです。如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。それから、彼が0になるまでの時間だけを必要とし、それから返品数を見つけます。(ここでは、&ANDアルゴリズムを使用して、奇数と偶数判断できます。これは、モジュロ演算よりも高速です。別の記事で書いています。興味がある場合は、チェックしてみてください。記事のアドレスは次のとおりです。なぜ同じアルゴリズムなのに、プログラム常にタイムアウトしますか?アルゴリズムの競争で知っておくべきヒント

完全なソリューションコードは次のとおりです。

class Solution {
public:
    int numberOfSteps (int num) {
        int ans = 0;
        while(num){
            ans++;
            if(num&1)
                num--;
            else
                num /= 2;
        }
        return ans;
    }
};

実行効率は次のとおりです。

ここに画像の説明を挿入

実行効率は2倍です!

問題2:Pythonソリューション

  数値を入力して、この数値を1にするために必要な回数を見つけてください。変更のルールは次のとおりです。如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。それから、彼が0になるまでの時間だけを必要とし、それから返品数を見つけます。(ここでは、&ANDアルゴリズムを使用して、奇数と偶数判断できます。これは、モジュロ演算よりも高速です。別の記事で書いています。興味がある場合は、チェックしてみてください。記事のアドレスは次のとおりです。なぜ同じアルゴリズムなのに、プログラム常にタイムアウトしますか?アルゴリズムの競争で知っておくべきヒント

完全なソリューションコードは次のとおりです。

class Solution:
    def numberOfSteps (self, num: int) -> int:
        ans = 0
        while(num):
            ans = ans + 1
            if(num&1):
                num = num - 1
            else:
                num = int(num / 2)
        return ans

問題3:Javaソリューション

  数値を入力して、この数値を1にするために必要な回数を見つけてください。変更のルールは次のとおりです。如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。それから、彼が0になるまでの時間だけを必要とし、それから返品数を見つけます。(ここでは、&ANDアルゴリズムを使用して、奇数と偶数判断できます。これは、モジュロ演算よりも高速です。別の記事で書いています。興味がある場合は、チェックしてみてください。記事のアドレスは次のとおりです。なぜ同じアルゴリズムなのに、プログラム常にタイムアウトしますか?アルゴリズムの競争で知っておくべきヒント

完全なソリューションコードは次のとおりです。

class Solution {
    public int numberOfSteps (int num) {
        int ans = 0;
        while(num > 0){
            ans++;
            if(num%2 == 1)
                num--;
            else
                num /= 2;
        }
        return ans;
    }
}

  みなさんこんにちは、私の名前は公式チー傑(チー関傑)、CSDN、時間のハエにおけるビットの学習コースレコードによってビットで、将来が期待できる、〜のブログのアドレスを加速することである:チー傑の公式ブログ

この記事はQi Guanが最初に書いたものです。サポートしてください。一部のプラットフォームでは、ブロガーの記事が盗まれています。

現在、ブロガーはCSDNでのみブログを作成しており、ブログの更新アドレスは次のとおりです。QiGuanjieのブログ

201件のオリジナル記事を公開 1835年に賞賛 230,000回の閲覧+

おすすめ

転載: blog.csdn.net/qq_43422111/article/details/105670535