LintCode Introduce Java & Coding Interview
2018-02-08 02:06
357 查看
LintCode Introduce Java 必做部分
9.4号美国劳动节放假一天,换个平台刷点算法题,先从基础的开始,由于这部分题目比较简单,我准备一个单元分两次写博客,一次必做题部分,一次选做题部分。今天带来的是第一单元必做题部分:第一题
反转一个只有3位数的整数。
注意事项
你可以假设输入一定是一个只有三位数的整数,这个整数大于等于100,小于1000。
样例
123 反转之后是 321。
900 反转之后是 9。
这道题和之前LeetCode的一到反转题很像,但是难度要第一点,因为规定了是三位数,也就不存在反转后溢出的问题;核心思路就是要把输入的三位数一位一位分离出来,然后乘以相应的位数。代码如下:
public int reverseInteger(int number) { // write your code here int sum = 0; for (int i = 0; i < 3; i++){ int n = number % 10; sum = sum * 10 + n; number = number / 10; } return sum; }
第二题 Fizz Buzz 问题
给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:
如果这个数被3整除,打印fizz.
如果这个数被5整除,打印buzz.
如果这个数能同时被3和5整除,打印fizz buzz.
这道题就是根据不同的条件输出不同的字符串,要注意的一点是我们需要先判断条件3,因为有的数字同时是3和5的倍数,如果此时先判断了条件1或者条件2,那么输出就不是fizz buzz了。代码如下:
public List<String> fizzBuzz(int n) { ArrayList<String> arr = new ArrayList<String>(); for (int i = 1; i <= n; i++){ if (i % 3 == 0 && i % 5 ==0){ arr.add("fizz buzz"); }else if (i % 5 == 0){ arr.add("buzz"); }else if (i % 3 == 0){ arr.add("fizz"); }else{ arr.add(String.valueOf(i)); } } return arr; }
第三题
给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
这道题题目意思很明确,将a+b的和返回即可,但是程序中不能使用+号。很直接想到是利用位运算符,在二进制中操作数字。其实不同的进制都包含进位,只不过二进制是逢二进一。当然在这之前我们需要把不进位的各个位相加。在这以2+3为例进行说明。
2在二进制中为00000010
3在二进制中为00000011
第一步不进位的各个位相加,也就是00000010+00000011,这个+号在这里要用异或,异或运算符就是相同为0,不同为1,而二进制中每个位只有0和1,如果都为1,和为0的情况说明进位了。那么这样操作后结果为:00000001
第二步我们要计算进位运算,这时候应该用&运算符,相同为1,不同为0。00000010 & 00000011 = 00000010,要注意的是&运算完之后需要左移以为,使用<<,不然没有进位。左移后为00000100。
第三部如果满足第二步进位的值为0,则返回第一步的值,就是两数之和了。若果第二步进位的值不为0,例如本例中,00000100是十进制的4,不为0。所以需要重复第一步和第二步,即00000001 ^ 00000100 = 00000101,然后00000001 & 00000100 = 00000000。此时00000000等于十进制的0,返回00000101,即
4000
为十进制的5。
分析完毕,代码如下:
public int aplusb(int a, int b) { // write your code here int sum = 0; int jinwei = 0; do{ sum = a^b; jinwei = (a&b) << 1; a = sum; b = jinwei; }while(jinwei != 0); return sum; }
相关文章推荐
- 《Cracking the Coding Interview》——第14章:Java——题目6
- lintcode&九章算法——100. 删除有序数组里的重复元素 ? 待解决
- lintcode-java-539.移动零
- lintcode&九章算法——Microsoft 面试题 | 我能赢 ? 待解决
- lintcode&九章算法——No.3 统计数字 ? 待解决
- lintcode&九章算法——Google 面试题 | 数组的度数 ? 待解决
- lintcode&九章算法——Lintcode No.96. 链表划分 ? 待解决
- { Cracking The Coding Interview: 150 programming Q&A } 5th edition Part II
- LintCode "Sliding Window Median" & "Data Stream Median"
- Java/J2EE Job Interview Companion - 400+ Questions & Answers
- 《Cracking the Coding Interview》——第14章:Java——题目1
- lintcode&九章算法——No.97 二叉树的最大深度 ? 待解决
- java 中的hashcode&equals
- LintCode 字符串置换 JAVA
- lintcode&九章算法——Google 面试题 | 字典里面的最长单词 ? 待解决
- lintcode编程题 java实现:(一)和大于S的最小子数组
- Java for LintCode 链表插入排序
- (1) other&interview --> 设计模式:Java开发中的23种设计模式详解(转)
- 九章算法 第一节 Algorithm Interview & Coding Style
- Jacquie Barker, «Beginning Java Objects: From Concepts To Code, Second Edition»