剑指offer系列49--求1+2+...+N的和

【题目】求1+2+3+…+n,
* 要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

 1 package com.exe10.offer;
 2
 3 /**
 4  * 【题目】求1+2+3+…+n,
 5  *             要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
 6  * @author WGS
 7  *
 8  */
 9 public class SumOfN {
10     int result=0;
11
12     public boolean calc(int n){
13         result+=n;
14         return n!=0 && calc(n-1);//只要n!=0  就一直递归执行加运算.
15     }
16
17     public int getSum(int n){
18         if(n<0) return -1;
19         calc(n);//只要calc函数中n==0 就为false 跳出calc函数,执行下步的return result
20         return result;
21     }
22     public static void main(String[] args) {
23         SumOfN s=new SumOfN();
24         int n=s.getSum(-10);
25         System.out.println(n);
26
27     }
28
29 }
时间: 2024-10-12 08:06:58

剑指offer系列49--求1+2+...+N的和的相关文章

剑指offer系列49:把二叉树打印成多行

有了上一个之字形打印二叉树,这个题就比较简单了. 首先分析这道题的结构,一行一行的输出. 1.如果第一行顺序存储,也就是先存左边在存右边.那么输出的时候也要同样的先左边后右边的顺序.这就是先进先出,所以用队列. 2.如果不顺序存,使用栈来存.第二行就先右边在左边,必须这样第一行输出的时候才可以先左后右.存第三行是根据第二行的弹出顺序决定的.因为第二行的弹出顺序是从左向右,所以第三行的第一个元素必须是第二行左边元素的子树.也就是在栈底.也就是说第三行开始的元素放在栈底只能最后输出,这样必然是不对的

剑指Offer系列之题11~题15

目录 11.矩形覆盖 12.二进制中1的个数 13. 数值的整数次方 14.调整数组顺序使奇数位于偶数前面 15.链表中倒数第k个结点 11.矩形覆盖 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 斐波那契数列的应用 第一次竖着放一块类比为走一步,第一次横着放两块类比为走两步 代码与上面的斐波那契数列类题目类似,此处不再赘述:剑指Offer系列之题6~题10. 12.

剑指offer系列10:合并两个排序的链表

我拿到这个题的时候举的例子是链表1:1.3.5.7和链表2:2.4.6.8.我的思路是以:1为基础,将表2的每个结点插入表1.也就是说我一次性是要给新建立的链表中加入两个元素,分别是两个原始链表的头结点.这个思路我做了半天头脑一片混乱,中间指针实在不知道怎么弄了.于是我去睡了一觉,哈哈,我大概是这个世界上最会逃避的人了…… 看了答案使用了递归的方法,其实我做的时候我有想到要用递归,但是没用的原因是我一般写代码不喜欢用递归,原因有两个,一个是递归容易死循环,一个是递归的复杂度太高.但这道题真的太适

剑指offer系列4:斐波那契数列

剑指offer第九题,这个题很古老了.第一个想到的肯定是递归,很简单. 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 class Solution { 5 public: 6 int Fibonacci(int n) { 7 if (n == 0) 8 { 9 return 0; 10 } 11 if (n==1||n==2) 12 { 13 return 1; 14 } 15 else 16 {

剑指offer系列47:堆成的二叉树

这个题的主要思路是: 用二叉树的左子树的右子树和右子树的左子树比较,再用左子树的左子树和右子树的右子树比较.(好像有点绕,但其实就是堆成的思想) 剑指offer的说法是用数的前序遍历的两个方法,前序遍历应该是:根->左->右.但是我们用另一种前序遍历:根->右->左.如果这两个序列一样就判断它是对称的. 这两个方法在实现上其实是一样的. 1 class Solution { 2 public: 3 bool isSymmetrical(TreeNode* pRoot) 4 { 5

剑指offer系列——48.不用加减乘除做加法

Q:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. T: 1.使用进制. 两个数异或:相当于每一位相加,而不考虑进位: 两个数相与,并左移一位:相当于求得进位: 将上述两步的结果相加 首先看十进制是如何做的: 5+7=12,三步走 第一步:相加各位的值,不算进位,得到2. 第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果. 第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12. 同样我们可以用三步走的方

剑指offer系列源码-求1+2+3+...+n

题目1506:求1+2+3+...+n 时间限制:1 秒内存限制:128 兆特殊判题:否提交:1260解决:722 题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为一个整数n(1<= n<=100000). 输出: 对应每个测试案例, 输出1+2+3+-+n的值. 样例输入: 3 5 样例输出: 6 15 解法一:使用构造方法模

剑指offer系列42---二叉树深度

[题目]输入一棵二叉树,求该树的深度. * 从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 1 package com.exe9.offer; 2 3 /** 4 * [题目]输入一棵二叉树,求该树的深度. 5 * 从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 6 * @author WGS 7 * 8 */ 9 public class BTreeDepth { 10 11 static class Tr

剑指offer系列26--正则表达式匹配

[题目]请实现一个函数用来匹配包括’.’和’*‘的正则表达式.模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例如,字符串”aaa”与模式”a.a”和”abaca”匹配,但是与”aa.a”和”aba”均不匹配 1 package com.exe6.offer; 2 /** 3 * [题目]请实现一个函数用来匹配包括’.’和’*‘的正则表达式.模式中的字符’.’表示任意一个字符, 4 * 而’‘表示它前面的字符

剑指offer系列61---数组中的逆序对

[题目]在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. * [思路]运用归并排序的思想. * 首先将数组分成两个子数组,统计子数组的逆序对: * 再合并,统计整个的逆序对. 1 package com.exe11.offer; 2 3 /** 4 * [题目]在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 5 * [思路]运用归并排序的思想.