zoukankan      html  css  js  c++  java
  • 264. Ugly Number II

    原题链接:https://leetcode.com/problems/ugly-number-ii/description/
    《剑指Offer》上面的原题,我已经看过解答了,就不废话了:

    /**
     * Created by clearbug on 2018/2/26.
     */
    public class Solution {
    
        public static void main(String[] args) {
            Solution s = new Solution();
            System.out.println(s.nthUglyNumber(1300));
            System.out.println(s.nthUglyNumber1(1300));
        }
    
        /**
         * 方法二:以空间换时间
         * 
         * @param n
         * @return
         */
        public int nthUglyNumber(int n) {
            if (n < 1) {
                return 0;
            }
    
            int[] arr = new int[n];
            arr[0] = 1;
    
            int doublePoint = 0;
            int triplePoint = 0;
            int pentaPoint = 0;
    
            int i = 1;
            while (i < n) {
                int doublePointNum = arr[doublePoint] * 2;
                int triplePointNum = arr[triplePoint] * 3;
                int pentaPointNum = arr[pentaPoint] * 5;
    
                if (doublePointNum <= triplePointNum && doublePointNum <= pentaPointNum) {
                    if (doublePointNum > arr[i - 1]) {
                        arr[i++] = doublePointNum;
                        doublePoint++;
                    } else {
                        doublePoint++;
                    }
                } else if (triplePointNum <= doublePointNum && triplePointNum <= pentaPointNum) {
                    if (triplePointNum > arr[i - 1]) {
                        arr[i++] = triplePointNum;
                        triplePoint++;
                    } else {
                        triplePoint++;
                    }
                } else {
                    if (pentaPointNum > arr[i - 1]) {
                        arr[i++] = pentaPointNum;
                        pentaPoint++;
                    } else {
                        pentaPoint++;
                    }
                }
            }
    
            return arr[n - 1];
        }
    
        /**
         * 方法一:这种方法简单粗暴,空间复杂度较低,但是耗时较长,正如《剑指Offer》里面所说,它超时了
         *
         * Submission Result: Time Limit Exceeded
         *
         * @param n
         * @return
         */
        public int nthUglyNumber1(int n) {
            int start = 0;
            int count = 0;
            while (count < n) {
                start++;
                if (isUgly(start)) {
                    count++;
                }
            }
            return start;
        }
    
        public boolean isUgly(int num) {
            if (num < 1) {
                return false;
            }
            while (num % 2 == 0) {
                num /= 2;
            }
            while (num % 3 == 0) {
                num /= 3;
            }
            while (num % 5 == 0) {
                num /= 5;
            }
            return num == 1;
        }
    
    }
    
  • 相关阅读:
    文件I/O(二)
    linux学习之文件I/O篇(一)
    静态库和共享库
    vim-ide
    CentOS6 vsftpd 安装及优化方法
    Redmine2.5+CentOS6+Apache2
    分享一个TP5实现Create()方法的心得
    Windows证书的生成导出以及使用证书验证文件是否被修改
    如何设置程序UAC控制
    关于C#的可变长参数
  • 原文地址:https://www.cnblogs.com/optor/p/8728409.html
Copyright © 2011-2022 走看看