力扣745(java&python)-达到终点数字(中等)
题目:
在一根无限长的数轴上,你站在0的位置。终点在target的位置。
你可以做一些数量的移动 numMoves :
每次你可以选择向左或向右移动。
第 i 次移动(从 i == 1 开始,到 i == numMoves ),在选择的方向上走 i 步。
给定整数 target ,返回 到达目标所需的 最小 移动次数(即最小 numMoves ) 。
示例 1:
输入: target = 2
输出: 3
解释:
第一次移动,从 0 到 1 。
第二次移动,从 1 到 -1 。
第三次移动,从 -1 到 2 。
示例 2:
输入: target = 3
输出: 2
解释:
第一次移动,从 0 到 1 。
第二次移动,从 1 到 3 。
提示:
-109 <= target <= 109
target != 0
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reach-a-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
参考题解:
@【宫水三叶】:https://leetcode.cn/problems/reach-a-number/solution/by-ac_oier-o4ze/
和@【爪哇缪斯】:https://leetcode.cn/problems/reach-a-number/solution/by-muse-77-g0il/
题目的意思就是:
移动的方向:向左或者向右移动
移动的距离:根据第 i 步 走 i 这么长的距离
例如:
第1步,移动的距离为1;
第2步,移动的距离为2;
第3步,移动的距离为3;
以此类推
有两种情况:
1.只朝一个方向走,一直朝左或者右走,移动numMoves次,正好可以到达target;
2.朝两个方向走,移动numMoves次,到达target。
数轴上的点都是以0为中心对称点,故只需要考虑一边就可以了,这里考虑正数的方向,将taret取绝对值。
参考图解:

先往靠近target的方向(正数方向)移动,前进的值为1+2+3+4...+ n = (n+1)*n / 2,根据最终所走的步数num是等于target,还是大于等于target位置分情况讨论:
- 直接到达target,此时消耗的就是最小步数,可直接返回;
- 超过target,差值为num- target,根据上面的图解可以看出,2 * A一定为偶数,如果这时候num - target 为偶数即【(num - target) mod 2 == 0】,就能通过前面的某一步反向移动,那么sum 值就可以减少num - target,从而移动到target位置上。
java代码:
1 class Solution {
2 public int reachNumber(int target) {
3 int ans = 0, num = 0, t = Math.abs(target);
4 while(num < t || (num - t) % 2 != 0){
5 ans += 1;
6 num += ans;
7 }
8 return ans;
9 }
10 }

python3代码:
1 class Solution:
2 def reachNumber(self, target: int) -> int:
3 target = abs(target)
4 num = ans = 0
5 while num < target or (num - target)% 2 != 0:
6 ans += 1
7 num += ans
8 return ans

力扣745(java&python)-达到终点数字(中等)的更多相关文章
- 力扣 - 剑指 Offer 46. 把数字翻译成字符串
题目 剑指 Offer 46. 把数字翻译成字符串 思路1(递归,自顶向下) 这题和青蛙跳台阶很类似,青蛙跳台阶说的是青蛙每次可以跳一层或者两层,跳到第 n 层有多少种解法,而这题说的是讲数字翻译成字 ...
- 力扣——single number (只出现一次的数字) python实现
题目描述: 中文: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 英 ...
- 力扣——single number 2(只出现一次的数字 2) python实现
题目描述: 中文: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? ...
- java & python猜数字游戏对比
1.java版 package day03; import java.util.Random;import java.util.Scanner; /** * 猜数字游戏 * 随机生成一个1-100之间 ...
- 领扣-754 到达终点数字 Reach a Number MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- LeetCode(力扣)——Search in Rotated Sorted Array2 搜索旋转排序数组 python实现
题目描述: python实现 Search in Rotated Sorted Array2 搜索旋转排序数组 中文: 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0 ...
- LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现
题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组 中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ...
- 力扣 ——Remove Duplicates from Sorted List II(删除排序链表中的重复元素 II)python实现
题目描述: 中文: 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4-> ...
- 力扣—one plus(加一) python实现
题目描述: 中文: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头 ...
- 力扣——Next Permutation(下一个排列) python实现
题目描述: 中文: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许 ...
随机推荐
- vid = two 切开 分开 - 两个眼睛 还有看的含义 - 词根
vid = two 切开 分开 - 两个眼睛 还有看的含义 - 词根 vi = wo acs 构词
- 【预训练语言模型】使用Transformers库进行GPT2预训练
基于 HuggingFace的Transformer库,在Colab或Kaggle进行预训练. 本教程提供:英文数据集wikitext-2和代码数据集的预训练. 注:可以自行上传数据集进行训练 目的: ...
- python 判断bytes是否相等的几种方法
一 前言: python判断bytes是否相等,一般要用到这几种方法:is,==,operator.下面做几个例子让大家看一下. 二 正文: 1 相等方法: test1=b'0xab' test2=b ...
- window.showModalDialog与opener及returnValue
首先来看看 window.showModalDialog 的参数 vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatu ...
- TCP可靠传输的保证
我们知道传输层提供最主要的两种协议,TCP和UDP,其中TCP是保证可靠传输,为什么他要保证可靠传输呢,IP说:当然是我不能,我只提供尽力而为的服务,不保证你能不能交付,不保证能不能正确的交付,不保证 ...
- k8s-master 设置调度污点
k8s master 调度污点 NoSchedule:K8Snode添加这个effecf类型污点,新的不能容忍的pod不能再调度过来,但是老的运行在node上不受影响 NoExecute:K8Snod ...
- JSON转换为CSV
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> ...
- 【已解决】wordpress 修改固定链接 伪静态URL出现nginx 404错误
一.站点设置 打开站点设置,选择伪静态,选择wordpress 二.wordpress设置 打开wordpress后台,选择设置 --->固定链接 选择一个你喜欢的格式点击保存 之后打开你的文章 ...
- 【Java基础知识】东软面试(一面)
01 面向对象的特征 封装:隐藏部分对象的属性和实现细节,以不同的访问级别来保护对象内部的数据,防止外部程序的不当访问,对外提供公开的接口.[私有的属性,共有的方法] 继承:子类自动共享父类数据和方法 ...
- #矩阵乘法#洛谷 3702 [SDOI2017]序列计数
题目链接 分析 考虑容斥,用总方案减去全是合数的方案数, 可以发现 \(n\) 很大,\(p\) 很小,直接用矩阵乘法转移即可 代码 #include <cstdio> #include ...