算法和数据结构的重要
2009-02-26 16:10
260 查看
今天在网上搜索汉字的排序问题,结果不经意的搜到了csdn的一个帖子,内容是关于汉字转化数字的问题。看了一些人的解法,感觉程序的写得很混乱,思路一点也不清晰。。这让我想到了面对一个问题的时候,思路是多么的重要,算法和数据结构正是给我们提供了一个解决问题的思路,或者说指导思想。当我们面对一个问题的时候,首先大脑去算法和数据结构里找方案,看看那个算法或者哪个数据结构适合解决这个问题。因为算法和数据结构都是在前人几十年经验的基础上形成的,所以常规的问题,往上一套就可以找到解决方案。当然书本上的那些算法还是不够,还要学习更深一些的算法,比如遗传算法什么的,但是至少算法里已经将这些问题作了一个分类,分治,动态规划,贪心,分枝限界,回朔等,至少能够想到问题能用哪一类算法去解决。。对于一些简单的问题,可能只需要用一个数据结构就能解决了,而不需要复杂算法。。比如下面这个问题。。当我看了一些烦躁的解答之后突然看到一个让我眼前一亮的解答,dlyme给出的,用栈来解决这个问题。一个简单的出栈入栈法则,最后加和就行了。。思路非常的清洗,代码量也非常小。。这才是一个优秀的程序员应该具备的能力。让我好生佩服,所以我加了他为好友。希望能做个朋友。下面也引用了这位仁兄的帖子内容。
这是google的一道面试题.
将汉字转换成数字, 如下
一 1
十 10
十一 11
二十 20
二十一 21
一百 100
一百零一 101
一百一十 110
一百一十一 111
当然算法要能将所有的汉字数字转换成阿拉伯数字,同时兼顾性能.
路过的大家不妨试试看... ...
用一个栈就可以实现转化:
如果新读入的汉字(假设它代表的数字为N)比栈顶数字还要大
{
弹出栈中所有比N小的元素,并将这些元素累加,假设结果为S;
将S*N入栈;
}
否则
{
将N直接入栈;
}
最后将栈中所有数字相加就可以。
举例:一亿一千二百五十八万三千二百四十(112,583,240)
第1步==>处理“一”,N=1
直接入栈,
此时栈中元素为:1 (右侧是栈顶)
第2步==>处理“亿”,N=100000000
弹出栈中唯一的元素,然后S=1,将S*N=100000000入栈
此时栈中元素为:100000000
第3步==>处理“一”,N=1
直接入栈
栈中元素为:100000000,1
第4步==>处理“千”,N=1000
弹出栈中比N小的元素(只有一个),然后S=1,将S*N=1000入栈
此时栈中元素为:100000000,1000
第5步==>处理“二”,N=2
直接入栈
此时栈中元素为:100000000,1000,2
第6步==>处理“百”,N=100
弹出栈中比N小的元素(只有一个),然后S=2,将S*N=200入栈
此时栈中元素为:100000000,1000,200
第7步==>处理“五”,N=5
直接入栈
此时栈中元素为:100000000,1000,200,5
第8步==>处理“十”,N=10
弹出栈中比N小的元素(只有一个),然后S=5,将S*N=50入栈
此时栈中元素为:100000000,1000,200,50
第9步==>处理“八”,N=8
直接入栈
此时栈中元素为:100000000,1000,200,50,8
第10步==>处理“万”,N=10000
弹出栈中比N小的元素(有四个),然后S=1258,将S*N=12580000入栈
此时栈中元素为:100000000,12580000
…………
这是google的一道面试题.
将汉字转换成数字, 如下
一 1
十 10
十一 11
二十 20
二十一 21
一百 100
一百零一 101
一百一十 110
一百一十一 111
当然算法要能将所有的汉字数字转换成阿拉伯数字,同时兼顾性能.
路过的大家不妨试试看... ...
用一个栈就可以实现转化:
如果新读入的汉字(假设它代表的数字为N)比栈顶数字还要大
{
弹出栈中所有比N小的元素,并将这些元素累加,假设结果为S;
将S*N入栈;
}
否则
{
将N直接入栈;
}
最后将栈中所有数字相加就可以。
举例:一亿一千二百五十八万三千二百四十(112,583,240)
第1步==>处理“一”,N=1
直接入栈,
此时栈中元素为:1 (右侧是栈顶)
第2步==>处理“亿”,N=100000000
弹出栈中唯一的元素,然后S=1,将S*N=100000000入栈
此时栈中元素为:100000000
第3步==>处理“一”,N=1
直接入栈
栈中元素为:100000000,1
第4步==>处理“千”,N=1000
弹出栈中比N小的元素(只有一个),然后S=1,将S*N=1000入栈
此时栈中元素为:100000000,1000
第5步==>处理“二”,N=2
直接入栈
此时栈中元素为:100000000,1000,2
第6步==>处理“百”,N=100
弹出栈中比N小的元素(只有一个),然后S=2,将S*N=200入栈
此时栈中元素为:100000000,1000,200
第7步==>处理“五”,N=5
直接入栈
此时栈中元素为:100000000,1000,200,5
第8步==>处理“十”,N=10
弹出栈中比N小的元素(只有一个),然后S=5,将S*N=50入栈
此时栈中元素为:100000000,1000,200,50
第9步==>处理“八”,N=8
直接入栈
此时栈中元素为:100000000,1000,200,50,8
第10步==>处理“万”,N=10000
弹出栈中比N小的元素(有四个),然后S=1258,将S*N=12580000入栈
此时栈中元素为:100000000,12580000
…………
相关文章推荐
- 算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。
- 算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了
- 经典数据结构沉思录(一):数据结构和算法为什么这么重要?
- 算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。——佚名
- 数据结构和算法为什么这么重要?
- 数据结构和算法为什么这么重要?
- 算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。
- 数据结构和算法为什么这么重要?
- 算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了
- 算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。
- 数据结构和算法为什么这么重要?
- 计算机科学中最重要的32个算法
- 算法与数据结构面试题(7)-链表“香蕉”问题
- 数据结构与算法4:二叉树1(二叉查找树)
- 数据结构-图-经典算法(三)
- 算法与数据结构(没有代码)
- 编程之久除了算法和数据结构,什么也不属于我们。
- 算法与数据结构-单向链表的直接插入排序和快速排序
- 速查表:常用算法和数据结构的复杂度
- MySQL索引背后的数据结构及算法原理