【问题标题】:DashInsert Coderbyte Challenge - Why does arr[i]%2===1 work?DashInsert Coderbyte 挑战 - 为什么 arr[i]%2===1 有效?
【发布时间】:2015-03-16 15:41:24
【问题描述】:

Coderbyte 问题是: 使用 JavaScript 语言,让函数 DashInsert(str) 在 str 中的每两个奇数之间插入破折号 ('-')。例如:如果 str 为 454793,则输出应为 4547-9-3。不要把零算作奇数。

所以当输入是 99946 时,输出应该是 9-9-946。

我有这个解决方案,但不太可行:

function DashInsert(num) {
var arr = num.toString().split('');
var i = 0;
while(i < arr.length-1){
if( arr[i]%2 !==0 && arr[i+1]%2 !==0){ 
arr.splice(i+1,0,'-'); 
}
i++
}
return arr.join(''); 
}

然后我找到了类似的答案:

function DashInsert(num) {
var arr = num.toString().split('');

var i = 0

while(i < arr.length-1){
if( arr[i]%2===1 && arr[i+1]%2===1){ 
arr.splice(i+1,0,'-'); 
}
i++
}

return arr.join(''); }
str = 99946;
alert(DashInsert(str)); 

谁能解释为什么它应该是 arr[i]%2===1?

【问题讨论】:

  • n 是一个整数时,n % 2 有两个可能的值...

标签: javascript


【解决方案1】:

两者都是正确的。 例如,取 9 : 9%2 != 0 和 9%2 ==1 。想一想,所有奇数都可以拆分为 2n+1 。模 2 将始终返回 1 ,而不是 0。

【讨论】:

    【解决方案2】:

    对于在沮丧的谷歌搜索中偶然发现这一点的其他人......

    添加第一个连字符后,它会更改数组的长度,因此在循环中对其进行评估以查看连字符元素是否为 !== 0。

    由于 '-' !== 0,添加了另一个连字符。

    这也是为什么你一直在吹你的堆栈,因为连字符不断改变你的数组的长度(旁注,总是将你的长度缓存在你的 for 循环之外的一个变量中,并在你的循环中使用它)。

    要修复它,您可以在 if 语句中添加更多 &&,即

    if(theArray[x] % 2 !== 0 && theArray[x+1]% 2 !== 0 && theArray[x] !== '-' && theArray[x+1] !== ' -')

    或者您可以更具体,只查找计算结果为 1 的模结果。

    【讨论】:

      【解决方案3】:

      我试过了,它有效..

      HTH..

      私有静态字符串 createDashedString(String str) {

          StringBuilder builder = new StringBuilder();
          char[] chararray = str.toCharArray();
      
          for (int i=0;i<chararray.length-1;i++) {
      
              int firstInt = Character.getNumericValue(chararray[i]);
              int nextInt = Character.getNumericValue(chararray[i+1]);
              if ((firstInt%2 !=0) && (nextInt%2 !=0)) {
                  builder.append(firstInt);
                  builder.append("-");
              }else {
                  builder.append(firstInt);
              }
          }
          builder.append(chararray[chararray.length-1]);
          return builder.toString();
      
      }
      
      
      public static void main(String args[]) {
      
          String str = "999999";
                        //01234
          System.out.println(createDashedString(str));
      
      
      }
      

      【讨论】:

        【解决方案4】:
        function DashInsert(str) { 
        
            let bil = 0;
             while (bil < str.length-1) {
                 if (Number(str[bil]) % 2 === 1 && Number(str[bil+1]) % 2 === 1) {
                   str = str.slice(0,bil+1) + "-" + str.slice(bil+1);
                   bil = bil + 2;
                 }
                 else {  
                     bil++;
                 }
           }
           return str;  
                  
         }
        
         console.log(DashInsert("454793"));
        

        【讨论】:

          猜你喜欢
          • 2016-03-11
          • 2023-01-24
          • 1970-01-01
          • 2020-10-25
          • 1970-01-01
          • 1970-01-01
          • 2022-07-13
          • 2015-07-31
          • 2017-10-03
          相关资源
          最近更新 更多