754. Reach a Number(到达终点数字)

链接:https://leetcode-cn.com/problems/reach-a-number/

题目:

  在一根无限长的数轴上,你站在0的位置。终点在target的位置。

  每次你可以选择向左或向右移动。第 n 次移动(从 1 开始),可以走 n 步。

  返回到达终点需要的最小移动次数。

  示例 1:

  输入: target = 3
  输出: 2
  解释:
  第一次移动,从 0 到 1 。
  第二次移动,从 1 到 3 。
  示例 2:

  输入: target = 2
  输出: 3
  解释:
  第一次移动,从 0 到 1 。
  第二次移动,从 1 到 -1 。
  第三次移动,从 -1 到 2 。
  注意:

  target是在[-10^9, 10^9]范围中的非零整数。

思路:

  emmmmmm这是一道数学题,需要找规律(一看这个数就知道不能暴力破解)。

  设定目标坐标为target,已经走了n步,坐标为F(n)=(n+1)*n/2,F(n-1)<sum<=F(n)找规律:

    1.如果每一步都往同方向走,最后的坐标是1+2+3+...+n=(n+1)*n/2。这样成立的话,所需步数就是n步,target=sum;

    2.目标值与sum存在差,(sum-target)为偶数 t 。那么,我们只需要在步长为 t/2 的那步反向走就行了,所需要的步数是 n;

    3.如果二者差距为奇数,(sum-target)为奇数k,这时候就有两种可能:

      (1)n为奇数,将n拆为(n-1)和1,(n-1)为偶数,按照第一类进行,1就多走两步,一正一反就得到差值1,所需步数为n+2

      (2)n为偶数,这时候多走一步n+1,差距就为n+1+sum-target(偶数),也按照第一类进行,只需要n+1步。

代码:

 public static int reachNumber(int target)
{
target = Math.abs(target);
int count = 0;
int sum = 0;
while (sum < target)
{
count++;
sum = sum + count;
}
if((sum - target)%2 != 0)
{
if (count % 2 == 0)
count = count + 1;
else
count = count + 2;
}
return count;
}

LeetCode 754. Reach a Number的更多相关文章

  1. LeetCode 754. Reach a Number到达终点数字

    题目 在一根无限长的数轴上,你站在0的位置.终点在target的位置. 每次你可以选择向左或向右移动.第 n 次移动(从 1 开始),可以走 n 步. 返回到达终点需要的最小移动次数. 示例 1: 输 ...

  2. 【Leetcode_easy】754. Reach a Number

    problem 754. Reach a Number solution1: class Solution { public: int reachNumber(int target) { target ...

  3. 【LeetCode】754. Reach a Number 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 数学 日期 题目地址:https://leetcod ...

  4. 754. Reach a Number

    You are standing at position 0 on an infinite number line. There is a goal at position target. On ea ...

  5. 【leetcode】Reach a Number

    题目: You are standing at position 0 on an infinite number line. There is a goal at position target. O ...

  6. 领扣-754 到达终点数字 Reach a Number MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. 【一天一道LeetCode】#260. Single Number III

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  8. C#版 - Leetcode 414. Third Maximum Number题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  9. 乘风破浪:LeetCode真题_009_Palindrome Number

    乘风破浪:LeetCode真题_009_Palindrome Number 一.前言 如何判断一个整型数字是回文呢,我们可能会转换成String来做,但是还有更简单的方法. 二.Palindrome ...

随机推荐

  1. DMA详解

    1.DMA由来DMA(Direct Memory Access,直接存储器访问).在DMA出现之前,CPU与外设之间的数据传送方式有程序传送方式.中断传送方式.CPU是通过系统总线与其他部件连接并进行 ...

  2. 7个最好的Java机器学习开发库

    摘要:现如今,拥有深度学习和机器学习领域的技术是科技界的趋势之一,并且企业则希望雇佣一些拥有良好的机器学习知识背景的程序开发工程师.本文将介绍一些目前流行的.强大的基于Java的机器学习库,希望给大家 ...

  3. Mac升级Node.js和npm到最新版本指令

    一.查看本机当前Node.js和npm版本 node -v npm -v 二.清除node.js的cache sudo npm cache clean -f 三.安装"n"版本管理 ...

  4. Android插件化技术——原理篇

    <Android插件化技术——原理篇>     转载:https://mp.weixin.qq.com/s/Uwr6Rimc7Gpnq4wMFZSAag?utm_source=androi ...

  5. Angular 中的 dom 操作(ViewChild)以及父子组件中通过 ViewChild 调用子组件的方法

    <app-header #header></app-header> <div #myBox> 我是一个dom节点 </div> <button ( ...

  6. 迷你版AOP框架

    http://www.cnblogs.com/artech/archive/2008/11/27/1342309.html

  7. log4j:ERROR setFile(null,true) call failed.错误解决

    首先说明,我是用hive执行bin/hiveserver2时出现的这个错误.如下图所示,红框中的内容也清晰的告诉我们出错的原因和文件路径. 之后,我查看了一下该路径.发现我用的是beifeng的用户, ...

  8. MySQL数据库表的设计和优化(上)

    一.单表设计与优化: (1)设计规范化表,消除数据冗余(以使用正确字段类型最明显):数据库范式是确保数据库结构合理,满足各种查询需要.避免数据库操作异常的数据库设计方式.满足范式要求的表,称为规范化表 ...

  9. 执行spark-shell报错:

    执行spark-shell报错: [ERROR] Terminal initialization failed; falling back to unsupportedjava.lang.NoClas ...

  10. go context源码解析

    go 的context贯穿整个goroutine的运行控制的中枢,可以实现执行的生命周期的控制. Context是一个接口,他派生了context.emptyCtx(TODO),cancelCtx,t ...