毎日の問題:面接問題64.1+2+...+nを求めます

6305 ワード

LeetCode面接問題64.1+2+...+nを求めます
タイトルアドレス
タイトルの説明
面接問題1+2+…+nを求めて1+2+…+nを求めて、乗除法、for、while、if、else、switch、caseなどのキーワードと条件判断文(A?B:C)を使うことができないことを要求します.
   1:

  : n = 3
  : 6
   2:

  : n = 9
  : 45
 

制限:
1 <= n <= 10000
解法
public class Solution {
    public int sumNums(int n) {
        int res= n;
        boolean x=res>0 && (res += sumNums(n-1))>0;
        return res;
    }

  /*  public static void main(String[] args) {
        System.out.println(new Solution().sumNums(5));
    }*/
}

問題を解く構想.
たんらくこうか
  • まずテーマ
  • を分析する
    要求一:乗除法を使用できない、以下の書き方が使用できないことを意味する
    (1+n)*n/2
    

    要求2:for、while、if、else、switch、caseは使用できません
     int res = 0;
     for(int i = 1; i <= n; i++)
     res += i;
    return res
    

    要求3:条件判断文(A?B:C)
     public int sumNums(int n) {
            int res= n;
            res+= n>0? sumNums(n-1):n;
            return res;
    }
    

    以上の3つの書き方は使用できません!!2.他の方法で私たちが望んでいる再帰分析の3つ目の要求を達成できるかどうかを考える3元表現
    res+= n>0? sumNums(n-1):n;
    

    書き方を変えましょう
    n>0 && sumNums(n-1)>0
    

    Javaでは論理演算子&&&|,いずれも短絡効果がある
    a&&bの場合、aとbが同時にtrueである場合にのみ、式全体がtrueとなる.式aがfalseである場合、式全体がfalseであるに違いないので、式bは実行されない
    そこで,aをtureとして,この方法の第2のブロックを再帰演算することができる.
    n=1の場合、n>1は成立せず、sumNums(n-1)>0は演算しない
    同時にsumを返す必要があります.戻り値として変数を設定し、sumNums(n-1)の結果を加算します.
    int res= n;
    boolean x=res>0 && (res += sumNums(n-1))>0;
    return res;