LeetCode中级算法-数学(1)
LeetCode中级算法-数学(1)
快乐数
[题目]
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
[输入]
19
[返回]
true
解释:
12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
[解法]
维护一个map存储当前计算快乐数的结果,然后无限迭代的计算快乐数,要是计算出的结果是1,表示是快乐数,要是计算出的结果在map中存储,说明要进入一个死循环了,则表示不是快乐数
[代码实现]
package main import fmt func main() { input := 19 result := computeResult(input) fmt.Println(result:, result) } func computeResult(input int) bool { filter := map[int]bool {} num := input for true { if num == 1 { return true } if _, exists := filter[num]; exists { break } num = _computeNext(input) } return num == 1 } func _computeNext(input int) int { result := 0 for input 0 { item := input % 10 input = input / 10 result = item * item } return result }
阶乘后的零
[题目]
给定一个整数 n,返回 n! 结果尾数中零的数量。
[输入1]
3
[返回1]
0
解释: 3! = 6, 尾数中没有零。
[输入2]
5
[返回2]
1
解释: 5! = 120, 尾数中有 1 个零.
[解法]
阶乘的结果中,结尾的0,是由所有子元素中成对的2和5形成的,所以我们的思路就是统计出每个元素中可以提供的成对的2和5的个数
[代码实现]
package main import fmt func main() { input := 5 result := computeResult(input) fmt.Println(result:, result) } func computeResult(input int) int { count2 := 0 count5 := 0 for i := 2; i input + 1; i++ { count2 += _compute(2, i) count5 += _compute(5, i) } return min(count2, count5) } func min(a int, b int) int { if a b { return a } return b } // 计算输入数字中包含目标数字的个数 func _compute(target int, input int) int { count := 0 num := input for num % target == 0 { count++ num = num / target } return count }
Excel表列序号
[题目]
给定一个Excel表格中的列名称,返回其相应的列序号。
[输入1]
A
[返回1]
1
[输入2]
AB
[返回2]
28
[输入3]
ZY
[返回3]
701
[解法]
我们设想这样一个题目, 字符串 123, 不使用强制类型转换,如何计算出对应的数字:
我们从头遍历,首先是 1,将它转为1,此时结果result = 1,遍历到 2,此时会result * 10 + 2, result = 12,遍历到 3,此时会result * 10 + 3, result = 123,字母的转换和这个是一致的,只不过字母的进制位是26,而数字的进制位是10
[代码实现]
package main import ( fmt strconv ) func main() { input := ZY result := computeResult(input) fmt.Println(result:, result) result2 := computeNum(321) fmt.Println(resultNum:, result2) } func computeResult(input string) int { items := []byte(input) result := 0 for i := 0; i len(items); i++ { item := items[i] - A + 1 result = result * 26 + int(item) } return result } func computeNum(input string) int { items := []byte(input) result := 0 for i := 0; i len(items); i++ { item, _ := strconv.Atoi(string(items[i])) result = result * 10 + item } return result }
LeetCode中级算法-数学(1) 相关文章
- Angel图神经网络算法在推荐场景下的实践
分享嘉宾:孙瑞鸿?腾讯大数据 编辑整理:赵文娇 出品平台:DataFunTalk、AI启蒙者 导读: 随着数据多样性的发展,图计算已经成为业界的一个重要的研究方向,其中图神经网络广泛应用于图的表征学习,与传统的图学习相比,既能学习图网络的拓扑结构,也能聚合
- 贪心算法:我要监控二叉树!
一路跟着「代码随想录」刷题的录友们,二叉树是不是都快忘了,哈哈,反正我讲过的内容我就默认大家都会了,来来来,本题是二叉树上的贪心。需要重温二叉树的录友,传送门: leetcode刷题最强指南(版本1.0) 通知: 一些录友表示经常看不到每天的文章,现在
- LeetCode中级算法-数学(2)
Pow(x, n) [题目] 实现 pow(x, n) ,即计算 x 的 n 次幂函数。 [输入1] 2.00000, 10 [返回1] 1024.00000 [输入2] 2.10000, 3 [返回2] 9.26100 [输入3] 2.00000, -2 [返回3] 0.25000 [解法] 无 [代码实现] package mainimport fmtfunc main() { input := floa
- Angel推荐算法在游戏推荐中的应用
文章作者:王培军?腾讯 高级工程师 整理编辑:李沛欣 出品平台:DataFunTalk、AI启蒙者 导读: Angel是腾讯自研的分布式高性能的机器学习平台,支持机器学习、深度学习、图计算以及联邦学习等场景。Angel的深度学习平台已应用在腾讯的很多个场景中。本次分享
- 计算机算法的五个特性是什么
计算机算法的五个特性是:1、有穷性,算法必须能在执行有限个步骤之后终止;2、确切性,算法的每一步骤必须有确切的定义;3、输入项,一个算法有0个或多个输入;4、输出项,一个算法有一个或多个输出;5、可行性,每个计算步骤都可以在有限时间内完成。 算法
- 一个算法示例:PHP实现开心消消乐
本文主要介绍了关于PHP如何实现我们大家都知道的开心消消乐的算法。 推荐:《PHP视频教程》 一、需求描述: 1、在一个8*8的矩阵方格中随机出现5种颜色的色块。 2、当有三个或以上色块在横向或纵向上相连,则消除这些色块。 3、色块消除后,上方色块往下平移,
- LRU算法的实现
缘由:看到redis的缓存淘汰机制,便自己实现了一下 代码实现(双向链表+HashMap) package com.jarjune.jdalao.framework.algorithm;import java.util.*;/** * LRU * @author jarjune * @version 1.0.1 * @date 2020/11/19 */public class LRUCacheK, V { //
- 拉斯维加斯算法之n后问题
1、拉斯维加斯(Las Vegas)算法 舍伍德算法优点在于计算时间复杂度对所有实例相对均匀,但与其相应的确定性算法相比,其平均时间复杂度没有改进。拉斯维加斯算法则不然,它能显著改进算法的有效性,甚至对某些迄今为止找不到有效算法的问题,也能得到满意的算
- 拉斯维加斯随机化算法求解整数因子分解
问题描述 设n1是一个整数。关于整数n的因子分解问题是找出n的如下形式的 唯一分解式 :。其中,p1p2…pk是k个素数,m1,m2,…,mk是k个正整数。如果n是一个合数,则n必有一个非平凡因子x,1xn,使得x可以整除n。 给定一个合数n, 求n的一个非平凡因子的问题称
- java面试之归并排序的应用
文章背景: 在复习算法及数据结构时,找到了面试笔试题目,下面我们来看看题目: (学习视频分享:java教学视频) 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1