每天一刷0817

力扣 数值的整数次方

实现函数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

说明:

-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:

  1. 底数为0,指数为负数时,是非法输入返回0.0
  2. 将接受进来的int n,用long类型的变量来存,防止越界
  3. 在求多少次方的时候用递归的方式去求,奇数次幂和偶数次幂分别处理
  4. 判断浮点数是否相等,写一个自己的函数来完成。

代码:

class Solution {
    
    
public:
    bool invalidInput = false;
    bool myequal(double a,double b){
    
    
        return abs(a-b)<0.0000001 ? true : false; 
    }
    double myPow(double x, int n) {
    
    
        invalidInput = false;
        long nn =n;
        if(myequal(x,0.0) && nn < 0){
    
    
            invalidInput = true;
            return 0.0;
        }
        unsigned int absn = (unsigned int) (nn);
        if(nn < 0){
    
    
            absn = (unsigned int) (-nn);
        }
        double result = helper(x,absn);
        if(nn < 0){
    
    
            result = 1.0/result;
        }
        return result;
    }
    double helper(double x, unsigned int n){
    
    
        if(n == 0){
    
    
            return 1;
        }
        if(n == 1){
    
    
            return x;
        }
        double result = helper(x, n>>1);
        result *= result;
        if(n & 0x1 == 1){
    
    
            result *= x;
        }
        return result;
    }
};

力扣 打印从1到最大的n位数

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

示例 1:

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

说明:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
考虑大数问题,用全排列解决问题
代码:

class Solution {
    
    
public:
    vector<int> res;
    vector<int> printNumbers(int n) {
    
    
        string numstr(n,'0');
        dfs(0,n,numstr);
        auto it = res.begin();
        res.erase(it);
        return res;
    }
    void dfs(int index, int n, string &s){
    
    
        if(index == n){
    
    
            res.push_back(atoi(s.c_str()));
            return;
        }
        for(int i = 0;i<10;++i){
    
    
            char temp = i+'0';
            s[index] = temp;
            dfs(index+1,n,s);
        }
    }
};

全排列打印abc

思路:
DFS全排列打印
代码:

#include<bits/stdc++.h>
using namespace std;

void DFS(int index, int n, vector<int>& boxs, vector<int> book,string str){
    
    
    if(index == n+1){
    
    
        for (int i = 1; i <= n+1; ++i) {
    
    
            cout.put(boxs[i-1]);
        }
        cout<<endl;
        return;
    }
    for (int i = 1; i <=n ; ++i) {
    
    
        if(book[i] == 0){
    
    
            boxs[index] = str[i-1];
            book[i] = 1;
            DFS(index+1,n,boxs,book,str);
            book[i] = 0;
        }
    }

}
int main()
{
    
    
    string str("abcd");
    int n=str.length();
    vector<int> boxs;
    vector<int> books;
    boxs.resize(n+1,0);
    books.resize(n+1,0);//标记数组初始化为0
    DFS(1,n,boxs,books,str);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_35353824/article/details/108053762