您的位置:首页 > Web前端

剑指offer第三章刷题

2020-08-03 17:13 591 查看

前言:代码质量包括规范性(布局清晰,命名合理,手写能认出来),代码的完整性(功能测试,边界测试,负面测试)

文章目录

1.数值的整次方

题目描述
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

示例 1:
输入: 2.00000, 10
输出: 1024.00000

示例 2:
输入: 2.10000, 3
输出: 9.26100

示例 3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25

思路
注意指数为负数的情况,且注意0的0次方是没有意义的,返回1或0都是可以的
优化的公式
当n为偶数时,a的n次方=a的n/2次方a的n/2次方
当n为奇数时,a的n次方=a的(n-1)/2次方a的(n-1)/2次方*a

代码

class Solution {
public double myPow(double x, int n) {
//底数为0直接返回
if(x == 0) return 0;
long b = n;
double res = 1.0;
//指数小于0
if(b < 0) {
x = 1 / x;
b = -b;
}
while(b > 0) {
//&是与运算 2的2进制 10  1的2进制01 10&01结果为0  3的2进制 11 11&01结果为1
//b&1==1的话它就是奇数,b&1==0为偶数
//若b为偶数,这个只执行一次即b最后为1的时候,把x的值赋给res
if((b & 1) == 1) res *= x;
x *= x;
b >>= 1;
}
return res;
}
}

2.打印从1到最大的n位数

题目描述
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

示例 1:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]

说明:
用返回一个整数列表来代替打印
n 为正整数

待更

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: