描述

给你一个正整数n,重复进行以下操作:
1.如果n是奇数,令n=n-3n=n−3
2.如果n是偶数,令n=n/2n=n/2
重复上述直至n=0停止,请输出进行操作的次数,如果n永远无法变成零,输出-1

示例1

输入:
2

返回值:
-1

说明:
1:2->1(2/2=1)
2:1->-2(1-3=-2)
3:-2->-1((-2)/2=(-1))
4.-1->-4(-1-3=-4)
5.-4->-2((-4)/2=(-2))
6.-2->-1((-2)/2=(-1))
.......开始进入第三步操作到第五步操作的循环,n永远无法等于0,所以返回-1。

思路

这道题其实并没有复杂的逻辑,按照题意编写即可,详情看下方代码。

public int Numberofoperations (long n) {
        // write code here
        if (n < 1) {
            return -1;
        }
        // 结果
        int result = 0;
        // 一直处理,直到跳出
        while (true) {
            // 当 n 是奇数
            if ((n & 1) == 1) {
                n -= 3;
            } else {
                // 当 n 是偶数
                n /= 2;
            }
            // 操作次数 + 1
            result ++;
            // 如果等于0则返回
            if (n == 0) {
                return result;
            } 
            // 小于0时返回 -1
            if (n < 0) {
                return -1;
            }
        }
    }