http://blog.csdn.net/cddchina/article/details/38759485
无奈就业之压力,不得不先放下 iOS 开发之就学,开始活动及久刷题路。
正好开用C++做界面的上,根本不掌握怎么用简陋的MFC控件做出比较漂亮的界面,后来尽管起来逐步接触到BCG
Xtreme ToolkitPro
v15.0.1,Skin++,等界面库,以及部分网友自己写的界面库,开始对C++软件界面美化有了一点点的体验。不敢藏私,希望与部分新手朋友等享受交流。
今天本身想聊聊 LeetCode 上之第279题-Perfect
Squares,花了挺长时间的,试了累累方,作为一个算法新手,个人感觉这题很好,对本身的档次提升大有辅助。我在此地跟大家享用一下我之想法。下面是问题:
Given a positive integer n, find the least number of perfect square
numbers (for example, 1, 4, 9, 16, … ) which sum to n.
For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given
n = 13,return 2 because 13 = 4 + 9.
一. 开源C++界面库
大概意思就是是,“给一个正数 n, 找到与为 n 的平方数,
给有最少的平方数个数”。
BFS
我正好开头想到的是为此 BFS,经过一番履行,感觉代码是本着之,但是 Time Limit
Exceeded。毕竟用了 2
层循环。于是我虽找了个字典(Dictionary)来存已经算过的节点,比如一个十分要命之数
n,有非常可怜几乎带队 n – i * i 这个节点和后面算出来的 m – j * j
是等的。那么即便不再另行计算。但是,还是过了。这有代码2单小时前于我丢了,我哪怕无在这边再次勾了。
1.RingSdk
Lagrange’s four-square theorem
此地终于完全用数学知识解决了是题目。不知晓季平方和定理的伸手参考
wikipedia。话说童鞋们最为难英文版的
wiki,别翻译成中文比较好。我吧无说英文更标准,虽然看似就是是这么回事 ==
因为发个公式非常重大,而打消这题都仰赖此公式:
夫定律就是讲话,任何数都好由4单平方数组成,即 n = a^2 + b^2 + c^2 +
d^2,所以这题的答案就限制在了 [1,4] 之间。
只要地方这个公式的发明者-Adrien-Marie
Legendre
又补了这个定律:除了满足以上是公式的数以外的另数还好由3单平方数组成。所以,这个答案而可以缩小范围了。范围都曾经缩小到
[1,3] 了,我们开始求解。
事先消除4个底状态:
while myN & 3 == 0 {
myN >>= 2
}
if myN % 8 == 7 {
return 4
}
因1跟2之情景较轻排除,先拿1及2之排除。
var index = Int(sqrt(Double(n)))
while index > 0 {
let tmp = Double(n - index * index)
let sqrtTmp = Int(sqrt(tmp))
if n == sqrtTmp * sqrtTmp + index * index {
return sqrtTmp == 0 ? 1 : 2
}
index -= 1
}
方的代码就是说,如果一个再三由2单平方数组成,如果中间一个平方数是0,那么尽管是1,如果无是0,那就是是2。
剩余的虽是3了,直接 return 3
就实施了。在掌握之数学公式的景况下,这个方法还是那个简短的。
Ringsdk是CSDN上一个长辈自己写的界面库,这个界面库很容易实现QQ2009的界面效果。链接见
DP
本身刚刷题没几龙,对于 DP
的演绎过程还非是殊娴熟,琢磨了漫漫。一旦琢磨出了,又当好简单,换一书写,又有何不可琢磨一年。lol
中低档的 DP 的下方式多就是 Recursion +
Memorization,就是递归和缓存。这里我们因而一个数组来囤积已经算是了之累之至少平方数的个数
(记作 minNum)。从1开始算(从0也没事)。
这里我们分开2层来算,外层循环是计算起1暨 n的相继数之无比少平方数 minNum,
存入到数组中,数组的 index 表示数 n,里面的 val 表示
minNum。关键是请每个数之 minNum。这里我们因此到递归,核心代码就是:
let tmp = val - i * i
minNum = min(minNum, tmp == 0 ? 1 : 1+sta.record[tmp])
tmp 代表 val 减去一个平方数剩下的再三,如果 tmp == 0,就代表 val == i *
i,即其由1单平方数组成;如果 tmp != 0,就那么我们尽管得要求为 tmp 为 val
的 minNum,也就是是 tmp2 = tmp - i * i
,这个 tmp2 即使一定给前的
tmp。为了求 tmp 的 minNum,我们得算出 从1至 sqrt(val)
之间有的或者价值,然后取最好小值。最后用很最小价存放到数组中。最终代码就是
func numSquares(n: Int) -> Int {
var record = [0,1]
while record.count <= n {
var val = record.count, minNum = record.count
for i in 1...Int(sqrt(Double(val))) {
let tmp = val - i * i
minNum = min(minNum, tmp == 0 ? 1 : 1+record[tmp])
}
record.append(minNum)
}
return record[n]
}
只是跑了后来以发现,我特喵的不易啊,怎么时间而是这么长,1400ms。如果拿个小大点的数放到
playground
里走同飞就见面发觉,循环次数要老多的。所以这边虽需考虑到把数组存成
static,而 swift 是不得已在 function 里直接申明 static var n = 1
的,我们需要将 static 放在 class/struct 里,参见 SO
大神的解答,还有官方
doc。
可拿这 struct 放在 class Solution
里面,也得在外边,最后时光是
60ms 左右。从 1400 到 60,还是可以的。
struct sta {
static var record = [0,1]
}
或者从短短这么一篇文章你尽管早已圈下了有 swift
语言的风味,最深之表征就是是种类安全。求个穷还设
Int(sqrt(Double(n)))
,我以前是故 C++
的,遇到这种状况还是出接触膈应的。但实际 swift
的亮点绝对是足以叫自家平安无视这些小麻烦的,其实习惯了后就是觉得是再度便宜,更安全了。
http://blog.csdn.net/ringphone/article/details/2911244
貌似Ringsdk和MFC无法进行相互,但是
RingSdk其中有诸多之图形处理的代码都挺有参考价值。
最后
各国首稿子我都于用心写,希望对的童鞋能一起读书共同前行。如果爱自己不怕伸手关注我啊,点个♥️表示鼓励吧~
近来貌似 RESTful 很生气,如果您针对 MongoDB 或者 RESTful
感兴趣,请圈自己的当即首稿子,我因此
MongoDB 作为后台数据库,用 AngularJS, Spark, Java 做了单网站 demo,建被
Heroku 上。每一样栽技术都是及时最流行的技术。
终极强烈推荐喜欢 swift,并想用 swift 写算法的童鞋,Swift Algorithm
Club,你值得拥有。
欢迎转载,转载请注明出处。
2.redui之官方网站http://www.redui.org 已经从不起来了。官方QQ群是 40729296
CSDN地址是
http://blog.csdn.net/jameshooo/article/details/6677272
当下是官方的辨证
REDUI,又名REDirectUI,全称是Rendering Engine for
DirectUI,是同等悠悠基于XML描述的 DirectUI
渲染引擎,能以“控件”的彼此与渲染过程分解成多单身的元素,包括布局、视觉效果、样式、UI自动化、滤镜、脚本、事件、3D场景、3D模型、通用动画等。通过这些因素的排列组合,可以表现出各种不同功效的控件,甚至会当XML中直接从定义控件类型。支持2D/3D无缝融合。
• REDUI支持GDI/GDI+/DirectDraw/D3D等渲染方式,并起支撑OPENGL/ES的愿
3.Duilib
之就较好名鼎鼎了,不用多说了咔嚓。包括华为网盘在内的浩大标准公司还以就此这界面库。我用Duilib做了一个小型的界面。贴出献丑一个。
4.WGI-1.0.7-Demo-Project-for-windows
。。额。。时间最长,忘记了此代码是呀,姑且先忽略她。
5.cj60lib 此游戏了Gh0st3.6木马的人口犹如数家珍,是同一缓慢对MFC进行进行的界面库
6.金山界面库 这个就是无赘述了,可以一直上金山的论坛找源代码和材料
7.skinTK_V0.20 一缓缓类似于Skin++的开源界面库
8.FreeCL_Skin2.3 一放缓不错的控件库 扩展了常用的MFC控件 。
这个是FreeCL_Skin提供的一个功效实例。
9.GuiLib1.5 一个老外写的界面库
没有因此了,没有调查,就从未有过发言权。大家自行百度。
10.基给3D的界面库 MangoGUI_V0.1.5
MangoGUI是猫仔在DXUT基础上改得来之一个开源GUI系统。
时吧基本上继承了DXUT里面大部分之效果和改良了采取方法,让DX学习爱好者又易失去用GUI系统。
一经您啊是平等个对GUI有兴趣的同班,非常欢迎你一头来与届MangoGUI的设计中来!
作者博客
http://m9551.blog.sohu.com/
11.基于Skia的directui库metalbone
代码托管地址
http://code.google.com/p/metalbone/
官说明
MetalBone是一个C++
DirectUI库。接口、命名等借鉴Qt,而不要以Windows风格。
MetalBone的性状是,使用CSS来定制样式(如果没CSS的言辞,则什么呢未显,lol)。目前得使Direct2D还是Google
Skia来绘制界面。MetalBone使用的凡 WWM协议(基于LGPL)
12.SonicUI2011
效能比不错的同款皮肤库
作者CSDN地址是
http://my.csdn.net/akof1314
13 基于OpenGl的界面库 beGUI-0.1.3-src
代码托管地址
http://code.google.com/p/begui/
二 未开始源或商业界面库
1.Flash4UI
看命名就知晓是用Flash嵌入到UI中。
官方网站是 http://www.flash4ui.com/
效能图片
2.bolt 迅雷7界面引擎
迅雷界面引擎,这个用了迅雷下载和迅雷看看的便闹体会了,界面的确是举行的老之称赞。而且流畅,CPU占用和内存各种都格外棒。采用了剧本交互的计,脚本语言采用了Lua.可惜的凡迅雷只开放了接口SDK给个体以。
合法网址 http://bolt.xunlei.com/
3.clayui
百度百科说明
clayui是一个应用纯C++编写的界面框架,可以非常方便之移植到各种系统及。现在支撑之系统包括Android,windows,wince,Linux。clayui的表征是能够实现各种2D,3D动画,一些WPF,FLEX才能够落实之界面效果,通过clayui可以充分便利的兑现。
clayui的底色渲染支持纯软件渲染,d3d,opengl
es硬件加速渲染,您可根据本人的需要选择适当的渲染方式,使你界面的用户体验及最佳功效
效果
4.DSkinLite
合法网址 http://www.uieasy.cn/dskinlite/
官方Demo
5.libuiDK
官说明:LibUIDK是国际直达顶尖的正规化开发Windows平台下图形用户界面的开发包,也是境内率先迟迟商业的尖端界面开发工具。该出包基于Microsoft的MFC库。使用这开发工具包可自由把画制作的精美界面用Visual
C++实现,由于LibUIDK采用所展现即所得之道创造产品界面,所以巨大的加强了活之支付速度,并大大加强图形用户界面(GUI)的亲和力。LibUIDK还可使您的软件轻松拥有当今风行的换肤功能,以提高产品的竞争力。
官方网站
http://www.iuishop.com/index.asp
实例
- SiteUi SkinSE 都发出官方网站。就不继续搬砖的办事了。
7.(未开源)上海勇进UIPower
以此比较牛逼。一款界面库就是非常几百万底。老总阙海忠还亲自录了20集聚的界面库相关的视频
官方网站 http://www.uipower.com/
顿时是老阙的视频。
8.炫彩界面库
炫彩界面库貌似是自己人开发之一个界面库,可以为此C++.c#轻语言等来支付。炫彩库的作者貌似是湖北襄阳人呀。
官方网站 http://www.xcgui.com/
9.魔方界面库
官方网站 http://www.muilib.com/
MuiLib(Magic UI
Library)Windows高级界面开发库是于境内首寒免费开源之DuiLib界面开发库基础及经过对的扩展而上扬起来的,他继续了DuiLib高度自由灵活的性状,并接收了任何界面库的一对独到之处,针对Windows层窗口按像素透明技术使首要优化后形成的一个完美界面开发库,是一个采取纯C++调用Windows
API的开发库,无其他其他第三正在依框架,您得利用该提供的各种高档控件来创造更加炫酷的用户界面
10 XtremeToolkit
鉴于Codejocwww.4688.comk
公司出品的同款界面库。应用也是比普遍的。在2013本子的大灰狼远程操控着尽管下了这款界面库。
11.Sharpui
代码托管地址 https://github.com/china520/sharpui
Sharpui是地处现在风靡的DUI思想的均等模仿界面库,可以方便实现半晶莹剔透与各种界面效果,采用纯c++实现,分为引擎以及控件两单部分,这半只有应用动态库的形式提供,引擎部分处理了风波、资源、渲染、控制逻辑,同时提供了各种应用范围控件的落实基类,包括:Visual、Element、FrameworkElement、Control、ContentControl、Window、Panel、Popup,这些近似包装了基础控件的落实细则,所有用户实现的控件都必须连续自这些类似,对于用表现的控件必须继续到FrameworkElement。
控件部分提供的备控件均使用DUI方式实现、分层绘制,实现各种常用的布局控件,可灵活实现界面的全自动布局;Sharpui本身装有数据结构利用原生实现,内存自动管理,不指让std的其余容器,使得库底运用更为独立、编译更加简明,使用VS任意一个版本编译都足以据此当其它版本里,不欲担心由于std版本原因只要发出编译问题。