毎日の問題:面接問題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 <= 10000
解法
問題を解く構想.
たんらくこうかまずテーマ を分析する
要求一:乗除法を使用できない、以下の書き方が使用できないことを意味する
要求2:for、while、if、else、switch、caseは使用できません
要求3:条件判断文(A?B:C)
以上の3つの書き方は使用できません!!2.他の方法で私たちが望んでいる再帰分析の3つ目の要求を達成できるかどうかを考える3元表現
書き方を変えましょう
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)の結果を加算します.
タイトルアドレス
タイトルの説明
面接問題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;