我希望对我最近发现的事情有一个更有经验的看法.几个月前,我设定了建立自己的移动应用程序的目标,我做的第一件事就是去developer.android.com并开始阅读有关如何执行此操作的文档.
我已经投入了大量时间来理解Android Studio以及如何制作简单的应用程序(我现在刚刚掌握了所有内容),但我最近刚刚阅读了像PhoneGap这样的框架(允许知道HTML的网络开发者) ,CSS和Javascript也制作应用程序).
在学习Android之前,我通过Odin项目教自己web开发,这项项目教会了我相当多的HTML,CSS和Javascript(对这种语言来说很少见,但我确信这是我可以轻松学到的东西,因为我已经有了一点经验).
我想知道你们觉得使用这些框架的局限性以及是否应该切换到它们,而不是继续使用Android,因为事情已经开始为我点击了.
谢谢!
问题陈述:给定一个循环链表,实现一个在循环开始时返回节点的algoirthm.
答案密钥提供了比我建议的更复杂的解决方案.我有什么问题?:
public static Node loopDetection(Node n1) {
ArrayList<Node> nodeStorage = new ArrayList<Node>();
while (n1.next != null) {
nodeStorage.add(n1);
if (nodeStorage.contains(n1.next)) {
return n1;
}
else {
n1 = n1.next;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud) 我有一个Rails项目,需要使用别人的Git存储库来处理后端工作.我把这个人的存储库带到我自己的存储库中并使其成为一个子模块(不确定这是不是正确的移动),所以我的项目目录中有一个名为'submodule'的文件夹(即它与我的app,bin,配置文件夹).
要在子模块文件夹中要求所有文件功能,我将以下内容放在application_controller.rb中(使用require_all gem):
require_all 'submodule'
Run Code Online (Sandbox Code Playgroud)
这是我的困惑:子模块文件夹本身就是一个Rails应用程序,因此它有一个app文件夹,配置等.我希望能够在我的应用程序中使用子模块的任何邮件程序/控制器/帮助程序文件夹使用.我知道我正确地要求它们,但是如何在我的应用程序中正确引用这些类/方法?那是什么语法?
例如,子模块有一个包含DeliveryProcessor类的交付控制器,而DeliveryProcessor类有一个名为deliver的方法.如何调用DeliveryProcessor类在交付方法我的应用程序的控制?
我正在研究问题陈述中陈述的问题.我知道我的解决方案是正确的(运行程序),但我很好奇我是否正确分析我的代码(下面).
def parens(num)
return ["()"] if num == 1
paren_arr = []
parens(num-1).each do |paren|
paren_arr << paren + "()" unless "()#{paren}" == "#{paren}()"
paren_arr << "()#{paren}"
paren_arr << "(#{paren})"
end
paren_arr
end
Run Code Online (Sandbox Code Playgroud)
例如,parens(3)将输出以下内容:
["()()()", "(()())", "(())()", "()(())", "((()))"]
Run Code Online (Sandbox Code Playgroud)
这是我的分析:每个f(n)值大约是f(n-1)的3倍.所以:
f(n)= 3*f(n-1)= 3*3*f(n-2)〜(3 ^ n)时间成本.通过类似的分析,堆栈将被f(1)... f(n)占用,因此空间复杂度应为3 ^ n.
我不确定这种时间或空间的分析是否正确.一方面,堆栈只保存n个函数调用,但是这些调用中的每一个都返回一个数组〜之前调用的3倍.这会影响太空成本吗?我的时间分析是否正确?
我正在研究一种算法,以确定井字游戏模型是否有赢家。不过有一点曲折-函数has_won?被多次调用。因此,我正在阅读的书(破解编码面试)中算法问题的作者建议生成2 ^ 9个可能的表中的每一个并将它们散列到一个表中。
为了为每个排列生成唯一的键,她将每个板表示为整数(板最初是一个char数组)。这样生成整数:(3 ^ 0)v0 +(3 ^ 1)v1 +(3 ^ 2)v2 + ... +(3 ^ 8)v8其中,如果空格为空,则v为0;如果空格为v,则为1它是X,如果是O,则为2。
这是我不关注的内容。我了解她为什么要这样做。但是,如何保证在大约20,000个可能的板中不会有另一个板不会以该表示形式共享相同的整数键值?她没有提供证明,而且我无法直观地理解为什么这是唯一的数字。
我正在构建一个测试应用程序,允许用户创建/删除帖子。我的销毁操作中有一个错误,我发现很难调试。这是我的测试:
describe '#destroy' do
context 'existing post' do
let (:post) { FactoryGirl.create(:post) }
it 'removes post from table' do
expect { delete :destroy, id: post }.to change { Post.count }.by(-1)
end
it 'renders index template' do
delete :destroy, id: post
expect(response).to render_template('index')
end
end
context 'delete a non-existent post' do
it 'creates an error message' do
delete :destroy, id: 10000
expect(flash[:errors]).to include("Post doesn't exist")
end
end
end
Run Code Online (Sandbox Code Playgroud)
这是我的破坏行动:
def destroy
@post = Post.find_by(id: params[:id])
if @post
@post.destroy
else
flash[:errors] = …Run Code Online (Sandbox Code Playgroud) 我知道有一种简单的方法,使用转置旋转方形矩阵90度,但我正在编写一个解决方案,好像我不知道那个(换句话说,我想要进行交换).下面的一般想法是逐层交换.的offset代表正在交换什么层(向外向内).
这是算法(注意它包含在一个class因为这是一个Leetcode的东西):
class Solution:
def rotate(self, matrix):
for start in range(len(matrix)//2):
end = len(matrix) - start - 1
# swap all 4 coordinates:
for offset in range(start, end):
# swap top_left over top_right
temp, matrix[start+offset][end] = matrix[start+offset][end], matrix[start][start+offset]
# swap top_right -> bottom_right
temp, matrix[end][end-offset] = matrix[end][end-offset], temp
# swap bottom_right -> bottom_left
temp, matrix[end-offset][start] = matrix[end-offset][start], temp
# swap bottom_left -> top_left
matrix[start][start+offset] = temp
Run Code Online (Sandbox Code Playgroud)
这适用于一些小矩阵的手动测试,以及Leetcode提交中较小的输入测试用例.但是,它在以下输入上失败:
[[ 2, 29, 20, 26, 16, 28], …Run Code Online (Sandbox Code Playgroud) 我正在研究以下算法,想知道我的实现是否正确:
给定无限数量的四分之一、一角硬币、五分硬币和便士,编写代码来计算表示 n 美分的方法数
这是没有记忆的:
def count_ways(n)
return 0 if n < 0
return 1 if n == 0
count_ways(n-25) + count_ways(n-5) + count_ways(n-10) + count_ways(n-1)
end
Run Code Online (Sandbox Code Playgroud)