[263] Ugly Number [Easy]

一个数的质因子只有2,3,5就叫丑数,写个函数判断丑数。

 //Author: Wanying
//注意 0 和 1 的corner case, 你居然还没一次AC==
//想好了再写,不然等着挂吧==!!!!!
class Solution {
public:
bool isUgly(int num) {
if (num == || num == ) {
return num;
}
while(num % == ) {
num = num / ;
}
while(num % == ) {
num = num / ;
}
while(num % == ) {
num = num / ;
}
return num == ;
}
};

[264] Ugly Number II [Medium]

第一个丑数是1,返回第n个丑数是多少。

思路:dp, 第u个丑数一定是 min(vec[idx2]*2, vec[idx3]*3, vec[idx5] *5) || 所以,要存idx2,idx3,idx5, 而且vec里面不能有重复的丑数.

 //Author: Wanying
//DP: idx2, idx3, idx5 class Solution {
public:
int nthUglyNumber(int n) {
vector<int> vec(,);
int idx2 = , idx3 = , idx5 = ;
for(size_t i = ; i <= n; ++i) {
int v2 = vec[idx2] * , v3 = vec[idx3] * , v5 = vec[idx5] * ;
int ith = min(v2, min(v3, v5));
if (ith == v2) {
idx2++;
}
if (ith == v3) {
idx3++;
}
if (ith == v5) {
idx5++;
}
vec.push_back(ith);
}
return vec[n-];
}
};

[313] Super Ugly Number [Medium]

跟Ugly Number II类似, 变化在于质因子不是[2,3,5]了,变成了透传进来的数组。 所以思路就从用3个idx变成了用一个数组的idx,其他一样,注意bug-free.

 //Author: Wanying
class Solution {
public:
int nthSuperUglyNumber(int n, vector<int>& primes) {
vector<int> idx(primes.size(), );
vector<int> ans(, );
for (size_t i = ; i <= n; ++i) {
int ith = INT_MAX;
for (int j = ; j < primes.size(); ++j) {
int tmp = ans[idx[j]] * primes[j];
ith = min(tmp, ith);
}
for (int j = ; j < primes.size(); ++j) {
int tmp = ans[idx[j]] * primes[j];
if (ith == tmp) {
idx[j] ++;
}
}
ans.push_back(ith);
}
return ans[n-];
}
};

[172] Factorial Trailing Zeroes [Easy]

给定一个数n, 求出n!中结尾0的个数。

考虑到造成结尾0的,只有5*2的倍数, 或者直接10, 100这种,所以,我们就用 n/5 得到n中5的个数,但是可能还有25,125这种含有不止一个5的情况,所以公式如下:

ans = n/5 + n/25 + n/125 + ......

n/5 是移除所有单个的5, n/25是移除多余的5, 同理.....

 /*
* Author: Wanying
* Language: C++
* Date: 2017/03/11
* 考虑到25, 125 这种数字中不止一个5, 所以公式如下: ans = n/5 + n/25 + n/125 + ......
* n/5 是移除所有单个的5, n/25是移除多余的5, 同理.....
*/
class Solution {
public:
int trailingZeroes(int n) {
int ans = ;
long long x = ; //x一直乘5, int会溢出
while (n >= x) {
ans += n / x;
x *= ;
//cout << x << " ";
}
return ans;
}
};

[166] Fraction to Recurring Decimal [Medium]

给两个数,分别代表分子,分母,求小数的表示形式,可能有循环节

  • Given numerator = 1, denominator = 2, return "0.5".
  • Given numerator = 2, denominator = 1, return "2".
  • Given numerator = 2, denominator = 3, return "0.(6)".

模拟竖式除法, 用个map记录循环节,还是不懂的话,自己在草稿纸上写个 3/444 你就懂了 :)

注意corner case, int可能越界, 全用long long 表示

 /*
* author: Wanying
* Date: 2017/03/11
* 思路就是模拟竖式除法,用个map记录循环节
* company: google
*/ class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
long long n = numerator, d = denominator; //不能用int, corner case: n = INT_MIN, d = -1; 除完了越界
string ans = "";
if (n == ) return "";
if (n < ^ d < ) {
ans += "-";
}
n = abs(n), d = abs(d);
ans += to_string(n/d);
//能整除直接返回整数部分
if (n % d == ) {
return ans;
}
ans += ".";
long long r = (n % d); // 余数也要用 long long, 不然(-1, -2147483648) 这组会溢出
map<int, int> mp; //模拟竖式除法,找循环节
while (r) {
if (mp.count(r) > ) {
ans.insert(mp[r], "(");
ans += ")";
break;
}
mp[r] = ans.size();
cout << r << " ";
r *= ;
ans += to_string(r/d);
r = r % d;
}
return ans;
}
};

【LeetCode】Math的更多相关文章

  1. 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java

    [LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...

  2. 53. Maximum Subarray【leetcode】

    53. Maximum Subarray[leetcode] Find the contiguous subarray within an array (containing at least one ...

  3. 【LeetCode】746. 使用最小花费爬楼梯

    使用最小花费爬楼梯 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始). 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或 ...

  4. 【LeetCode】714、买卖股票的最佳时机含手续费

    Best Time to Buy and Sell Stock with Transaction Fee 题目等级:Medium 题目描述: Your are given an array of in ...

  5. 【leetcode】963. Minimum Area Rectangle II

    题目如下: Given a set of points in the xy-plane, determine the minimum area of any rectangle formed from ...

  6. 【Leetcode】104. 二叉树的最大深度

    题目 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例:给定二叉树 [3,9,20,null,null,15,7 ...

  7. 【LeetCode】319. Bulb Switcher 解题报告(Python)

    [LeetCode]319. Bulb Switcher 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/bulb ...

  8. 【Leetcode】Pascal&#39;s Triangle II

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...

  9. 27. Remove Element【leetcode】

    27. Remove Element[leetcode] Given an array and a value, remove all instances of that value in place ...

随机推荐

  1. Linux系统分辨率设置

    linux 设置分辨率 如果你需要在linux上设置显示屏的分辨率,分两种情况:分辨率模式存在与分辨率模式不存在,具体如下. 1,分辨率模式已存在 1)如何查询是否存在: 图形界面:在System S ...

  2. 大数据基础环境--jdk1.8环境安装部署

    1.环境说明 1.1.机器配置说明 本次集群环境为三台linux系统机器,具体信息如下: 主机名称 IP地址 操作系统 hadoop1 10.0.0.20 CentOS Linux release 7 ...

  3. 记一下await用法

    async函数会返回一个Promise对象,可以使用then方法添加回调函数, 当async函数有return时,会作为success的参数 当async函数有抛错时,会作为fail的参数. 当函数执 ...

  4. get和post 两种基本请求方式的区别

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...

  5. 项目部署错误 HTTP Error 500.19 - Internal Server Error

    HTTP Error 500.19 - Internal Server Error配置错误: 不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的 (overrid ...

  6. 【Flutter学习】页面布局之其它布局处理

    一,概述 Flutter中拥有30多种预定义的布局widget,常用的有Container.Padding.Center.Flex.Row.Colum.ListView.GridView.按照< ...

  7. 【Flutter学习】基本组件之TabBar顶部导航

    一,概述 TabBar,是材料设计(Material design)中很常用的一种横向标签页.在Android原生开发中,我们常用ViewPage或者一些常用的标签页开源库,来实现并行界面的横向滑动展 ...

  8. 从输入 URL 到页面展示,到底发生了什么

    从输入 URL 到页面展示,到底发生了什么 1.输入URL 当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应 ...

  9. CPU、内存、磁盘三者的关系

    参考:https://blog.csdn.net/weini1111/article/details/70849332 cpu是大脑,计算数据用的. 内存是草稿纸,开着电脑一直都在用里边的数据,如果断 ...

  10. 数据访问层的超级基类AbstractBaseDAL

    using System; using System.Collections; using System.Data; using System.Data.Common; using System.Co ...