50. Pow(x, n)

实现 pow(x, n) ,即计算 x 的 n 次幂函数。

示例 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] 。

思路

//确定边界,n可以为负数
//暴力法
//分治(幂运算)
//迭代(幂运算),牛顿迭代法

solution 1 暴力

//超时
class Solution {
public double myPow(double x, int n) {
double re = 1;
if (n<0){
for (int i = 0; i <-n;i++){
re = re*(1/x);
}
}
if (n>0){
for (int i = 0; i<n; i ++){
re = re*x;
}
}
return re;
}
}

solution2 分治(幂运算)

//时间复杂度(logN)
class Solution {
public double myPow(double x, int n) {
return n>=0 ? helper(x,n):1.0/helper(x,-n);
}
public double helper(double x, int n){
if (n==0) return 1.0;
//下一层,子问题
double re = helper(x,n/2);
return n%2==0 ? re*re : re*re*x;
}
}

solution3 迭代

//-n必须为long类型
class Solution {
public double myPow(double x, int n) {
long N = n;
return n >= 0?helper(x,N):1.0/helper(x,-N);
}
public double helper(double x, long n){
double res = 1.0;
double contribute = x;
while (n>0){
if (n%2 == 1){ //为奇数时要多乘一个本身
res *= contribute;
}
contribute *= contribute; //下一次要迭代的
n /= 2;
}
return res;
}
}

17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

输入:"23"

输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

说明:

尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

solution1递归回溯

//时间复杂度为3^N*4^M (n+m=digits.length())
class Solution {
public List<String> letterCombinations(String digits) {
List<String> ans = new ArrayList();
if (digits == null || digits.equals("")) return ans;
Map<Character, String> map = new HashMap<Character,String>();
map.put('2',"abc");
map.put('3',"def");
map.put('4',"ghi");
map.put('5',"jkl");
map.put('6',"mno");
map.put('7',"pqrs");
map.put('8',"tuv");
map.put('9',"wxyz");
helper(digits,ans,"",map,0);
return ans;
}
public void helper(String digits,List<String> ans,String curr,
Map<Character,String> map,int index){
//终止条件
if (index == digits.length()) {
ans.add(curr);
return;
}
//当前层,下一层
String letters = map.get(digits.charAt(index));
for (int i = 0;i < letters.length();i++){
helper(digits,ans,curr+letters.charAt(i),map,index+1);
}
}
}
//总结
// String判空 str==null || str.equals("")
// list转String String join = String.join(",", list);
// char[]转String String str = String.valueOf(cha);
// String转char[] char[] cha = String.toCharArray();
// String转char char c = String.charAt( index );

solution2 队列

class Solution {
public List<String> letterCombinations(String digits) {
List<String> ans = new ArrayList();
if (digits == null || digits.equals("")) return ans;
Map<Character, String> map = new HashMap<Character,String>();
map.put('2',"abc");
map.put('3',"def");
map.put('4',"ghi");
map.put('5',"jkl");
map.put('6',"mno");
map.put('7',"pqrs");
map.put('8',"tuv");
map.put('9',"wxyz");
ans.add("");
for (int i=0; i<digits.length(); i++){
String letters = map.get(digits.charAt(i));
int size = ans.size(); //数组长度计算不能放在for循环里,长度会一直变化
for (int j=0; j < size;j++){
String str = ans.remove(0);//队列弹出第一个元素
for (int k = 0; k < letters.length(); k++){
ans.add(str+letters.charAt(k));
}
}
}
return ans;
}
}

LeetCode 分治篇(50、17)的更多相关文章

  1. ETL工具--kettle篇(17.10.09更新)

    ETL是EXTRACT(抽取).TRANSFORM(转换).LOAD(加载)的简称,实现数据从多个异构数据源加载到数据库或其他目标地址,是数据仓库建设和维护中的重要一环也是工作量较大的一块.当前知道的 ...

  2. 经典面试题sql基础篇-50常用的sql语句(有部分错误)

    Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...

  3. mysql 开发进阶篇系列 17 MySQL Server(key_buffer与table_cache)

    一.key_buffer 上一篇了解key_buffer设置,key_buffer_size指定了索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度.通过检查状态值Key_read_reque ...

  4. LeetCode 分治算法

    分治算法:是将问题划分为一些独立的子问题,递归的求解个子问题,然后合并子问题的解而得到原问题的解. 分治算法步骤 step1 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题: ...

  5. 面试之leetcode分治-求众数,x幂等

    1 leetcode50 计算 x 的 n 次幂函数. 实现 pow(x, n) ,即计算 x 的 n 次幂函数. (1)调用库函数 (2)暴力o(N) (3)分治 xxxxxx.......x    ...

  6. leetcode.分治.241为运算表达式设计优先级-Java

    1. 具体题目 给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果.你需要给出所有可能的组合的结果.有效的运算符号包含 +, - 以及 * . 示例 1: 输入: & ...

  7. leetcode 签到 面试题 17.16. 按摩师 动态规划

    题目: 一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接.在每次预约服务之间要有休息时间,因此她不能接受相邻的预约.给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长 ...

  8. [LeetCode]剑指 Offer 17. 打印从1到最大的n位数

    输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数 999. 示例 1: 输入: n = 1 输出: [1,2,3,4,5,6,7, ...

  9. DLL 生成与使用的全过程(2010-01-18 14:50:17)

    转载自 水滴的博客http://blog.sina.com.cn/spiritofwater   个人学习用 转载▼   分类: 技术 由dll导出的lib文件: 包含了每一个dll导出函数的符号名和 ...

  10. shamir叠像术 分类: 图像处理 2015-07-08 16:50 17人阅读 评论(1) 收藏

    K=imread('SHNU.bmp'); height=info.Height; width=info.Width; A=zeros(height,width); B=zeros(height,wi ...

随机推荐

  1. K8S - Jenkins在K8S下的持续集成

    准备nfs网络存储 提前安装好nfs服务 [root@master ~]# yum -y install nfs-utils rpcbind [root@master ~]# systemctl st ...

  2. 舞会(lgP1352)

    写了一个多小时,本来觉得 bfs 能过然后码了好久发现不会确定顺序,又重新写了一遍 dfs /kk 好吧其实是因为我记得上次做这题的时候写的是 bfs 设 \(f[i][0]\) 表示以 \(i\) ...

  3. 高效技巧揭秘:Java轻松批量插入或删除Excel行列操作

    摘要:本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 在职场生活中,对Excel工作表的行和列进行操作是非常普遍的需求 ...

  4. 数据结构与算法(LeetCode) 第二节 链表结构、栈、队列、递归行为、哈希表和有序表

    一.链表结构 1.单向链表节点结构 public class Node{ public int value; public Node next; public Node(int data){ valu ...

  5. 全面掌握胶囊网络:从基础理论到PyTorch实战

    本文全面深入地探讨了胶囊网络(Capsule Networks)的原理.构建块.数学模型以及在PyTorch中的实现.通过本文,读者不仅能够理解胶囊网络的基础概念和高级数学原理,还能掌握其在实际问题中 ...

  6. LVS负载均衡群集——其二

    LVS-DR 通信四元素:源IP,源端口,目的IP,目的端口 主机A(客户端)-->VIP 主机B(调度器) 主机A(客户端)<--VIP 主机C(节点服务器) 通信五元素:源IP,源端口 ...

  7. kubernetes驱逐机制总结

    概述 k8s的驱逐机制是指在某些场景下,如node节点notReady.node节点压力较大等,将pod从某个node节点驱逐掉,让pod的上层控制器重新创建出新的pod来重新调度到其他node节点. ...

  8. (Good topic)字符串的最大公因子 (3.21leetcode每日打卡)

      对于字符串 S 和 T,只有在 S = T + ... + T(T 与自身连接 1 次或多次)时,我们才认定 "T 能除尽 S". 返回最长字符串 X,要求满足 X 能除尽 s ...

  9. .NET周刊【11月第3期 2023-11-19】

    国内文章 .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试 https://www.cnblogs.com/FreeSql/p/17836 ...

  10. 深入理解 BigBird 的块稀疏注意力

    引言 基于 transformer 的模型已被证明对很多 NLP 任务都非常有用.然而,\(O(n^2)\) 的时间和内存复杂度 (其中 \(n\) 是序列长度) 使得在长序列 (\(n > 5 ...