Objective c 查找下一个Aloha号码

Objective c 查找下一个Aloha号码,objective-c,algorithm,Objective C,Algorithm,我在一个编码实践站点中发现了这个问题…问题如下 如果一个数字完全由4s和7s组成,则称之为aloha数字。下面是阿洛哈数的几个例子 4477 47744477 您的程序将获得一个非Aloha数的整数,并且您的输出必须以字符串的形式返回该输入的下一个Aloha数 例1 输入:1234 产出:4444 例2 输入:4472 产出:4474 输入数字表示1和2*10^9之间的整数 输入编号不是Aloha编号 我试着解决这个问题如下 - (NSString *) nextAlohaNumber:(NSU

我在一个编码实践站点中发现了这个问题…问题如下

如果一个数字完全由4s和7s组成,则称之为aloha数字。下面是阿洛哈数的几个例子

4477 47744477 您的程序将获得一个非Aloha数的整数,并且您的输出必须以字符串的形式返回该输入的下一个Aloha数

例1

输入:1234

产出:4444

例2

输入:4472

产出:4474

输入数字表示1和2*10^9之间的整数 输入编号不是Aloha编号 我试着解决这个问题如下

- (NSString *) nextAlohaNumber:(NSUInteger) number{

        // method convertNumberIntoDigit return a array of digits present in input number
        NSMutableArray *numberDigits = [self convertNumberIntoDigit:number];
        NSUInteger tempNum;

        for(int index = 0; index < numberDigits.count; index++){
            tempNum = [[numberDigits objectAtIndex:index] intValue];
            if(4 != tempNum && 7 != tempNum){
                if(4 > tempNum){
                    [numberDigits replaceObjectAtIndex:index withObject:[NSNumber numberWithInt:4]];
                }else if (7 > tempNum){
                    [numberDigits replaceObjectAtIndex:index withObject:[NSNumber numberWithInt:7]];
                }
                else if(7 < tempNum){
                    [numberDigits replaceObjectAtIndex:index withObject:[NSNumber numberWithInt:4]];
                    int previousIndex = index-1;
                    int previousNum = [[numberDigits objectAtIndex:previousIndex] integerValue];
                    if(previousIndex ){
                        if(4 == previousNum){
                            [numberDigits replaceObjectAtIndex:previousIndex withObject:[NSNumber numberWithInt:7]];
                        }
                        else if(7 == previousNum){
                            [numberDigits replaceObjectAtIndex:index withObject:[NSNumber numberWithInt:4]];
                        }
                    }
                }
            }
        }
        return [self numberArrayToStr:numberDigits]; // convert strings with digit in Array
    }
但是这种方法并不能通过所有的测试用例,例如,它在输入4478、790等方面失败。 任何人都可以帮助我解决这个问题,为所有输入更好的时间和空间复杂性

PS:我对C、C++代码也很好。


提前谢谢。

尽管我在上面发表了评论,我还是想知道时间和空间的复杂性。结果证明是微不足道的;这只需要3个长整数变量和每个输入数字上的一个循环,可以通过此算法增加以使用1个以上的数字;这不会导致整数溢出

从最低数字开始,如果低于4,则替换为4。如果低于7,则将其替换为7。对于8和9,将其替换为4并增加下一个数字。重复此操作,直到处理完所有数字

下面的代码返回正确的aloha数的数字本身,如果不是,则返回下一个更高的数字

它需要使用超过32位的长变量,因为允许的最大输入2*10^9的aloha数为4444-超出32位整数的范围

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv)
{
    long not_aloha, aloha, digit;
    if (argc != 2)
    {
        printf ("please give an aloha number\n");
        return -1;
    }
    not_aloha = atoi (argv[1]);
    printf ("not aloha: %ld\n", not_aloha);

    aloha = 0;
    digit = 1;
    while (not_aloha)
    {
        if ( (not_aloha % 10) <= 4)
            aloha += 4*digit;
        else if ( (not_aloha % 10 ) <= 7)
            aloha += 7*digit;
        else
        {
            aloha += 4*digit;
            not_aloha += 10;
        }
        digit *= 10;
        not_aloha /= 10;
    }
    printf ("aloha: %ld\n", aloha);

    return 0;
}

因此,您的代码无法工作,您需要有人编写能够工作的代码。恐怕不是这样的。此外你的代码既不是C也不是C++。请把你的标签更新。@ JunWue&EyNET4我知道这段代码是Objto-C,因为我写了这个,我不想任何人为我写任何代码。我已经写了一些代码。对于某些特殊情况,它不适用。我只是要求人们在这些情况下提出建议。我认为这个地方已经完全是这样了,不是吗?你的错误似乎是,当把一个大于7的数字改成4时,你忘了在左边的数字上加1。如果是4或7,您应该在测试之前这样做,并且您不需要单独的测试,因为它将在下一个循环迭代中进行。感谢@Jongware提供的信息性评论…您是对的,我忘记添加一个数字。这将为15给出错误的答案,即47而不是44。