剑指offer系列之十一:数值的整数次方

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

首先,我觉得这道题思路应该很简单,幂的情况无非是三种:正数、0和负数。当幂是0的时候,直接返回1;当幂是负数的时候,需要先把其转化为正数来处理,然后返回其倒数就可以了;当幂是正数的时候,按照正常的计算方法就可以。实际上这道题主要考察时代码的健壮性——就是对幂的情况的考虑是否周全。下面是实现的代码(已被牛客AC):

package com.rhwayfun.offer;

public class PowerOfDouble {
    public double Power(double base, int exponent) {
        double result = base;
        if(exponent == 0) return 1;
        if(exponent > 0){
            for (int i = 1; i < exponent; i++) {
                result *= base;
            }
            return result;
        }else{
            int absExponent = -exponent;
            for (int i = 1; i < absExponent; i++) {
                result *= base;
            }
            return 1/result;
        }
    }

    public static void main(String[] args) {
        double a = new PowerOfDouble().Power(0.5, -2);
        System.out.println(a);
    }
}
时间: 2024-09-29 10:56:13

剑指offer系列之十一:数值的整数次方的相关文章

剑指offer系列之五十一:正则表达式匹配

题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 由于只涉及两种正则表达式的匹配,所以关键是需要分清除匹配的所有情况,对于模式串来讲,出现了'.'和'*

剑指offer系列之四十一:和为S的两个数字且乘积最小

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 有了上一题的基础,解决这题应该不难,思路与上一题差不多,不过这里只需要要求两个数字即可.所以可以设定两个指针,第一个指针指向数组的第一个元素,第二个指针指向最后一个元素,不断改变第一个指针的位置就可以确定和为S的两个数字.这里还有一个要求是这两个数字的乘积最小,实际上由于数组是递增排序的,所以第一个找到

剑指offer系列之三十一:把数组排成最小的数

题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 根据结果判断,所谓最小的数字实际上就是对数组中所有元素的一个组合.一种笨拙的方法是求出所有元素的全排列,然后对所有排列的值的大小进行排序,那么就可以得到最小的数了.求全排列的算法已经在之前的文章中提到.那么是不是还有其他思路呢?联想到Java库函数中有一个sort方法,是不是可以直接使用呢?(该sort方法的时

剑指offer系列之六十一:二叉树搜索树的第k个节点

题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 因为二叉搜索树是排序的,所以如果需要找出第k个节点只需要进行中序遍历就可以得到第k节点.不过中序遍历的结果就是排序的,所以实质上就是插入排序.可以利用一个集合,在遍历的过程中利用插入排序的算法就能得到第k个节点.下面是这种实现思路的实现代码(已被牛客AC): public class Solution { //采用非递归中序遍历的方式得到第k

剑指offer系列之二十六:输出字符串的全排列

题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 结果请按字母顺序输出. 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 此题与剑指offer原题存在一些初入,在原题中并没有规定字符串中字符是否有重复的出现.不过思路是一致的,只不过是添加额外的判断罢了.下面说说我的思路吧:先不考虑是否出现重读字符,要对一个字符进行全排列,可以

剑指offer系列之十二:调整数组顺序使奇数位于偶数前面

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 这道题第一思路自然是这样的:从头开始遍历这个数组,如果遇到偶数就把这个数之后的所有数往前移动一位,这样数组会留出一个空位,移动完毕之后把该偶数放到该空位即可.这样处理的话需要两次循环,一次是遍历,另一次是移位,所以时间复杂度是O(n2).下面是这种思路的实现代码(已被牛客AC): public void reOrd

剑指offer系列之三:在二维数组中查找元素

题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 由于题目条件的成立,所以使得这道题可以使用对角线的方法完成,可以从右上角的元素考虑,如果目标查找元素小于右上角的元素,那么不可能在右上角元素所在的列,如果目标大于剩余列的右上角的元素,那么不可能在该右上角元素所在的行.依照这个规律,就可以完成目标元素的查找(参考剑指offer书中的思路).基于此,我写出如下的代码(已被

剑指offer系列之五十二:表示数值的字符串

题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值. 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是. 这题与前面吧字符串转为数值有些类似,但是这里是判断

剑指offer系列之二十一:从上到下打印二叉树

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 此题实际上就是二叉树层序遍历方法的考察,具体思路是:使用一个集合(或者栈,但是相对来说使用栈操作会方便一些)来保存遍历的节点,还需要创建一个集合用来保存最后输出的遍历序列.从根节点开始遍历,首先把该节点放入集合中,并输出其值,之后便从集合中移除该节点,不过在此之前需要判断该节点是否有左右孩子,如果有左右(满足其一就可以)孩子,便把左右孩子放入集合中.每次输出值后便把节点具体的值放入遍历集合中,作为最后的返回结果. 下面是基于这种思