- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试找到“丑陋”的数字,这是一系列只有质因数是 [2,3,5] 的数字。
我找到了动态规划解决方案,想了解它是如何工作的,以及逻辑背后的数学直觉是什么。
该算法是为 2、3 和 5 的倍数保留三个不同的计数器变量。让我们假设 i2、i3 和 i5。
声明丑陋数组并将索引 0 初始化为 1,因为第一个丑陋数字是 1。
初始化i2=i3=i4=0;
ugly[i] = min(ugly[i2]*2, ugly[i3]*3, ugly[i5]*5) 并递增 i2 或 i3 或 i5 选择的索引。
试运行:
ugly = |1|
i2=0;
i3=0;
i5=0;
ugly[1] = min(ugly[0]*2, ugly[0]*3, ugly[0]*5) = 2
---------------------------------------------------
ugly = |1|2|
i2=1;
i3=0;
i5=0;
ugly[2] = min(ugly[1]*2, ugly[0]*3, ugly[0]*5) = 3
---------------------------------------------------
ugly = |1|2|3|
i2=1;
i3=1;
i5=0;
ugly[3] = min(ugly[1]*2, ugly[1]*3, ugly[0]*5) = 4
---------------------------------------------------
ugly = |1|2|3|4|
i2=2;
i3=1;
i5=0;
ugly[4] = min(ugly[2]*2, ugly[1]*3, ugly[0]*5) = 5
---------------------------------------------------
ugly = |1|2|3|4|5|
i2=2;
i3=1;
i5=1;
ugly[4] = min(ugly[2]*2, ugly[1]*3, ugly[0]*5) = 6
---------------------------------------------------
ugly = |1|2|3|4|5|6|
我不知道如何从 2 的索引中形成 6。谁能用简单的方式解释一下?
最佳答案
每个“丑数”(1 除外)都可以通过将一个较小的丑数乘以 2、3 或 5 得到。
假设到目前为止找到的丑数是 [1,2,3,4,5]。基于该列表,我们可以生成三个丑陋数字序列:
乘以2,可能的丑数是[2,4,6,8,10]
乘以3,可能的丑数是[3,6,9,12,15]
乘以5,可能的丑数是[5,10,15,20,25]
但是列表中已经有 2、3、4 和 5,所以我们不关心小于或等于 5 的值。让我们用 -
标记这些条目以指示我们不关心他们
乘以2,可能的丑数是[-,-,6,8,10]
乘以3,可能的丑数是[-,6,9,12,15]
乘以5,可能的丑数是[-,10,15,20,25]
事实上,我们真正关心的是每个序列中的最小数
乘以2,大于5的最小数是6
乘以3,大于5的最小数是6
乘以5,大于5的最小数是10
在丑数列表中添加 6 后,每个序列都多了一个元素:
乘以2,可能的丑数是[-,-,-,8,10,12]
乘以3,可能的丑数是[-,-,9,12,15,18]
乘以5,可能的丑数是[-,10,15,20,25,30]
但是每个序列中有用的元素是:
乘以2,大于6的最小数是8
乘以3,大于6的最小数是9
乘以5,大于6的最小数是10
所以你可以看到算法正在做的是创建三个丑陋数字序列。每个序列都是通过将所有现有的丑数乘以三个因子之一形成的。
但我们只关心每个序列中最小的数字(大于目前发现的最大丑数)。
因此索引 i2、i3 和 i5 是对应序列的索引。当您使用序列中的数字时,您更新索引以指向该序列中的下一个数字。
关于algorithm - Ugly Number - dp 的数学直觉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57596718/
我学过这两种DP方式,现在很迷茫。不同情况下我们如何选择?而且我发现在大多数情况下,自上而下对我来说更自然。谁能告诉我如何做出选择。 PS:这篇文章我看过older post但仍然感到困惑。需要帮忙。
我在想是否有某种通用的方法可以将自上而下的动态编程转换为自下而上的编程。 我们能否想出某种机制来提供正式的方式,通过这种方式我们可以将自上而下的 DP 转换为自下而上的 DP。 注意:我是动态规划的初
在我的 xml 中,我在 TextView 上有这个: android:textSize="18dp"(是的,我知道 dp 不适合文本,但这不是重点) 我还有其他一些以编程方式创建的 TextView
假设我正在为屏幕尺寸等于或大于 600dp 的设备开发不同的布局。我想使用 post android 3.2 资源限定符。我创建了一个名为 layout-sw600dp 的文件夹并将我的布局放在那里,
最近我在 https://leetcode.com/problems/palindrome-partitioning-ii/ 上遇到了这个问题: 给定一个字符串s,划分s使得划分的每个子串都是回文。
我已经尝试使用 admob 大约 4 个小时了,现在真的卡住了。我得到: Not enough space to show ad. Needs 320x50 dp, but only has 288
我正在尝试将可变数量的像素计算为与密度无关的像素,反之亦然。 这个公式 (px to dp): dp = (int)(px/(displayMetrics.densityDpi/160)); 不适用于
我正在从头开始创建一个 HTML 页面,并在其中动态放置值,然后将其显示在 WebView 中。 我正在尝试在 WebView(作为 HTML)中复制 ActionBar(出现在应用程序的其他 Act
我正在使用 the 4.17.37 of Bootstrap 3 Datepicker - eonasdan datepicker 我有一个正确显示的内联日期选择器,我只会使用天模式,所以我使用以下代
我正在尝试将智能横幅广告添加到我的 fragment 布局中,但我不断得到的是“没有足够的空间来展示广告。需要 320x50 dp,但只有 309x0 dp”。 这是我的 fragment 布局。
我在关于 http://developer.android.com/guide/practices/screens_support.html 的一些不幸的歧义中迷失了方向,而且我找不到澄清问题的 st
写在前面 $ DP $,是每个信息学竞赛选手所必会的算法,而 $ DP $ 中状态的转移又显得尤为关键。本文主要从状态的设计和转移入手,利用各种方法对朴素 $ DP $ 的时间复杂度和空间复杂度进行
我试图理解一种著名的正则表达式匹配 DP 算法。以防万一,人们不知道这是描述和算法。 '.' Matches any single character. '*' Matches zero or mor
注意:是的,我知道Android中还有其他处理按钮的方法,但这只是一个示例来说明我的问题(实际的按钮要复杂得多)。因此,请不要在为Android中的按钮提供其他解决方案时回信,我正在寻找PaintCo
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
我正在测试 Samsung Galaxy Note 3根据文档,它是 1080 x 1920 像素(~386 ppi 像素密度)。我想弄清楚 dp 中的屏幕宽度 是多少,以便我可以正确应用并检查 ne
所以我现在完全迷路了,当用户通过Accessibility -> Font size 将字体大小时设置为Huge 时,文本大小会破坏我的 UI,所以为了快速修复 我决定将所有文本大小更改为 dp 而不
更新:我发现了我的问题。我已经为不同的分辨率定义了单独的可绘制资源,但我不知道我必须为不同的屏幕尺寸创建不同的布局。我想我应该更全面地阅读“支持多屏幕”页面。遇到此问题的任何其他人,请阅读整个页面:
阅读这篇文章(http://developer.android.com/guide/practices/screens_support.html)后,我在 xml 文件中使用 dp 单元开发了一个完整
该问题需要计算特定成本的硬币变化次数。 例如,如果我有 50, 20, 10, 5, 1 的硬币值(value),我可以形成以下成本: 5 => (5), (11111), 这是2种方式。 10 =>
我是一名优秀的程序员,十分优秀!