zoukankan      html  css  js  c++  java
  • 【打破思维局限性】算法问题中的奇技淫巧(不断更新)

    1、数字和问题(Update:2016-7-14)

    大家在最初开始学习编程的时候一定都做过这样一道题:

      步骤I       给定一个自然数n,

      步骤II     将n中每一位数字相加,得到一个新的自然数m

      步骤III    赋值:n=m

      步骤IV     判断:如果n只有一位数字(即0≤n<10)则输出数字n,否则返回到步骤II。

    没错这是道简单的题目,大部分同学的思路也跟上面给出的四步差不多。嗯,我也一直是这么做的,直到在CodeWars上面看到了这样一段代码……

    1 public class DRoot {
    2   public static int digital_root(int n) {
    3     return (n != 0 && n%9 == 0) ? 9 : n % 9;
    4   }
    5 }

    嗯,没错,不需要用递归反复加,只要求一个模一步就出来了。至于为什么可以这么做,以本人微弱的数学功底只能从找规律的角度理解一下了:如下表所示,求和结果实际上是从1到9反复循环,因此只要用n模9并对结果为0的情况单独处理一下就可以了……如果大家有更好的想法欢迎在评论里给出。

  • 相关阅读:
    3574. 乘积数量
    1357. 优质牛肋骨
    1356. 回文质数
    3554. 二进制
    13 vue路由跳转传参
    12 el-form的inline属性
    10 js数组赋值问题
    9 彻底搞懂json字符串和json对象
    8 element自定义卡槽的好处
    7 el-table表格中使用Dropdown 下拉菜单无法显示下拉框的问题
  • 原文地址:https://www.cnblogs.com/lzj0218/p/5670226.html
Copyright © 2011-2022 走看看