题解 | #简单的变换#
简单的变换
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 算法题