• Java面试


     Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

    For example:

    Given num = 38, the process is like: 3 + 8 = 111 + 1 = 2. Since 2 has only one digit, return it.
    要求:不能用递归,不能用循环,并且在O(1)时间复杂度内求解 
    比较原始的解法如下:

    /**
    * Created by seven_hu on 2015/8/16.
    */
    public class demo1 {
    public static void main(String[] args){
    System.out.println(getLastResult2(248));

    }
    //getResult(int num)的作用是将num拆分,得到各个数位上的值,然后对他们进行求和,返回最后的和
    public static int getMediaResult(int num){
    int sum=0;
    while (num!=0){
    sum=num%10+sum;
    num=num/10;
    }
    return sum;
    }
    //
    public static int getLastResult(int num){
    int result=getMediaResult(num);
    while(result>9){
    result=getMediaResult(result);
    }
    return result;
    }


    虽然上述代码解决了问题,但是不符合要求。因此正确的解法如下: 
    public static int getLastResult2(int num){
         return (num-1)%9+1;

    解释如下:
    对于任意一个整数,它要么是9的倍数,要么不是9的倍数。
    如果一个数(记为num)是9的倍数,那么它会有如下两个性质:
    1.num不管是几位,它的各个位上的数字之和也是9的倍数。(记各个位上的数字之和为Snum)
    2.两个相邻的9的倍数之差是9. 
    3.num%9=Snum%9
     对于任意一个整数num(可以是9的倍数,也可以不是),假设离它最近的并且比它小的9的倍数的各个位上的数字之和为9的n倍
    public static int getLastResult2(int num){
    return (num-1)%9+1;

  • 相关阅读:
    Eclipse怎么汉化
    eclipse的 project explore找不到了, 怎么把复制来的包放在project explore
    三 地图的绘制
    二 CheatEngine怎么提取地图数据
    一. 透明坦克跑起来
    第七章 继承与派生
    Quoit Design HDU
    C++学习_从C到C++
    C++学习_一道程序填空题重拾C++
    网络爬虫_BeautifulSoup库入门
  • 原文地址:https://www.cnblogs.com/hujingwei/p/4737353.html
Copyright © 2020-2023  润新知