题解 | #简单的变换#

简单的变换

http://www.nowcoder.com/practice/0a6682c0a1444dc687b407fb3237fd1e

描述

给你一个正整数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;
            }
        }
    }
AC_算法题 文章被收录于专栏

AC 算法题

全部评论

相关推荐

点赞 评论 收藏
分享
死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
在评审的大师兄很完美:像这种一般就是部门不匹配 转移至其他部门然后挂掉 我就是这样被挂了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务