1.求平方根
import java.util.*;
public class Solution {
/**
*
* @param x int整型
* @return int整型
*/
public int sqrt (int x) {
// write code here
return (int)Math.sqrt(x);
}
}
2. 斐波那契数列
题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
题目解析
方法一:
普通递归版求法,这种方法通常和汉诺塔一起被放在课本的递归教学部分,应该是面试官不希望看到的算法。
利用上面递推式,自顶向下进行求解:
public class Solution {
public int Fibonacci(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
方法二:
我们可以将递推式的求解从自顶向下改为自底向上(循环实现)。简而言之,我们已知前两项的值,然后我们就可以用前两项的值求出第3项的值,接着求第4、第5、……,直到求出第n项的值。
public class Solution {
public int Fibonacci(int n) {
int a = 0, b = 1;
for (int i = 1; i <= n; i++) {
a = a + b;
b = a - b;
}
return a;
}
}
方法三:
利用我们高中学过的“待定系数法”可以推导出斐波那契数列的通项公式。公式如下,(推导过程略)
public class Solution {
public int Fibonacci(int n) {
double a = Math.sqrt(5)/5;
double b = Math.pow((1+ Math.sqrt(5))/2, n);
double c = Math.pow((1- Math.sqrt(5))/2, n);
return (int)(a * (b - c));
}
}
3. 将字符串转化为整数
(暂时木全懂)
import java.util .*;
public class Solution {
/**
* @param str string字符串
* @return int整型
*/
public int atoi(String str) {
// 若字符串为空或去除前后空格后为空,返回0
if (str == null || str.trim().length() == 0) {
return 0;
}
//处理掉前后空格并转化为字符串数组
char[] arr = str.trim().toCharArray();
int sign = 1, index = 0;
//判断正负号
if (arr[0] == '+')
index++;
if (arr[0] == '-') {
sign = -1;
index++;
}
int num = 0;
for (int i = index; i < arr.length; i++) {
if (arr[i] - '0' >= 0 && arr[i] - '9' <= 0) {
//如果当前运算会越界的时候,直接输出结果
if (num >= Integer.MAX_VALUE / 10) {//注意此处得/10,否则马上要超范围时,下一此更新num会数字跳变
if (sign > 0)
return Integer.MAX_VALUE;
else
return Integer.MIN_VALUE;
}
num = 10 * num + arr[i] - '0';//数字放在判断超出范围之后进行,防止马上要超范围时u,
// 数字更新带来符号跳变
} else{
//如果是字母,跳出循环
break;
}
}
return num * sign;
}
}