一种将字符串(如 "999")递增到 "1000" 而不将整个字符串转换为 int 的方法?



我在一次面试中被问到这个问题,要想出一个方法来接受一个字符串,比如"999",然后把它加1,然后返回一个新的字符串,比如"1000"。

他说约束是不能直接从字符串转换为整数,尽管可以将字符转换为整数。

我知道这是一个相当简单的代码,像"488"的情况下,你只有最后一个字符'8',将其转换为整数增量,并返回"489"。

但是对于像"999"这样的情况,如何进行结转逻辑呢?

从后面开始,进位1。得到数字;加上进位。如果现在是10,把它变成0,进1;否则进位为0。转换为字符。重复所有数字向后。最后,如果不为零,则前置进位。(如果进位为0,可以提前停止,只复制剩余的数字)

如何从"199"结转到"200"?如果你已经解决了这个问题,那么"999"只是意味着在你把其他值代入零之后,在开头加一个"1"。"999" -> "000" -> "1000".

您可以在不使用int的情况下做到这一点。将String转化为char[]。从结尾开始。如果最后一个字符在'0'和'8'之间,则在该字符上加1并返回该数组为String,否则将'9'更改为'0'并重复之前的数字。如果返回到开头,则返回"1" + chars

给你http://jsfiddle.net/c74vqvan/.

var s = '999';
var total = '';
var carryTheOne = true;
for(var i = s.length-1; i >= 0; i--)
{
    var intValue = s.charAt(i);
    if(carryTheOne)
    {
        intValue++;
    }
    carryTheOne = intValue == 10;
    if(carryTheOne)
    {
        intValue = 0;
    }
    total = intValue + total;
}
if(carryTheOne) total = '1' + total;
alert(total);

你能做的就是把每个字符单独转换成整数。因此,取最后一个字符(在"ones"位置),将其转换为整数并存储它。取倒数第二个字符(在"tens"位置),将其转换为整数,将其乘以10,并将其加到总数中。清洗并重复。然后加1,然后通过除以10来将每个数字"弹出"。

最新更新