自己遇到的前端面试题解法

题目是这样的,我们的需求中可能会遇见数字大于javascript中对大的数,即javascript可以存储的极限,我们就会使用数组来存,比如1998,存储为[1,9,9,8].

我们需要一个方法,将这个数加一,写一个addOne函数实现,中间肯定不能出现再转换回原数.

面试的时候一般都比较紧张,所以就想出来用递归,就是遇见棘手的问题,索引值问题

先贴出,用面试官提出的for循环方法吧,当时没想出来,座地铁的时候想起来的

 1     var arr = [9,9,9];
 2 
 3     function addOne (array) {
 4         var len = arr.length;
 5         for (var i=len-1; i>=0 ;i-- ) {
 6             if ((arr[i] + 1) != 10){
 7                                 // 如果相加后小于10就退出for循环
 8                 break;
 9             } else {
10                 arr[i] = 0;
11                                // 如果执行到了第一位相加后还为10,就得进1
12                 if (i==0){
13                     arr.unshift(1);
14                 }
15             }
16         }
17         return array;
18     }
19 
20     alert(addOne(arr));

自己写的方法,有待完善。

var arr = [9,9,9]; 
    var CreateAddOne = function (array) {
        var i = array.length -1;
        return function () {
            while(i >= 0){//这写的不大对,等会修改下
                if ((array[i] += 1) == 10){
                    array[i] = 0;
                    if (i-- == 0){
                        array.unshift(1);
                    }
                    // 执行递归,从后往前执行
                    arguments.callee();
                }
            }
            return array;
        }
    }
    var addOne = CreateAddOne(arr);
    alert(addOne());

另一道面试题,关于正则的,去除连续的重复数字

1 var re = /(\d)\1+/g,
2     str = '1113332211',
3     res = '';
4 
5 res = str.replace(re, function (r1, r2) {
6     return r2;    
7 });
8 
9 alert(res); // '1321'
posted @ 2012-09-01 15:22  zzu-han  阅读(311)  评论(0编辑  收藏  举报