[Leetcode] 397.integer-replacement

一、问题链接:
https://leetcode.com/problems/integer-replacement/description/

二、思路:
对偶数直接除二
对奇数进行加一或者减一的操作。
1、刚开始想的比较简单,全部加一。发现部分测试用例未过
2、然后就发现,加一或者减一是需要来进行选择的操作,进行加一之后的数字如果能够被四整除,则倾向于加一。
3、进行如上两步操作之后还是有些case未通过,查看一下发现是数字3的独特性,故单独处理即可。
三、编码:
a、
int output = 0;
if (n == 1) {
return output;
}

    while (n != 1) {
        ++output;
        n = n % 2 == 0 ? n / 2 : ((n - 1) / 4 == 0 ? n - 1 : n + 1);
    }
    return output;
}

b、老样子,需要考虑int范围问题,转为大范围来进行
int output = 0;
long na = n;
if (na == 1) {
return output;
}

    while (na != 1) {
        System.out.println(na + "    " + output);
        ++output;
        na = na % 2 == 0 ? na / 2 : ((na == 3 || ((na >>> 1) & 1) == 0) ? na - 1 : na + 1);
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,918评论 0 38
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,417评论 0 2
  • 2018年4月2日 星期一 农历二月初十七 天气晴 作息:昨晚23:00睡,今早5:36起床 学习:赖老师《学说集...
    饶爱兰阅读 156评论 0 0
  • 一、函数介绍: 该函数读入一个文件并写入到输出缓冲,成功返回TRUE、失败返回FALSE readfile(fil...
    这个程序员不太冷阅读 2,437评论 0 2
  • 我一直认为自己是缺少色彩和个性,空无一物的人。总觉得自己是腹中空空的容器,里面根本没有可以称作内容的东西。没有明显...
    葉鹿阅读 410评论 0 0