C#算法之各位相加
各位相加
给定一个非负整数 num
,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
进阶:
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?
代码模板
public class Solution { public int AddDigits(int num) { } }
测试数据
输入 1 输出 1 输入 10 输出 1 输入 38 输出 2 输入 199 输出 1 输入 8888 输出 5
笔者的方法:
使用了while循环,除一次计算一次,原始数和各位数和同时变化。时间在70ms内。
public static int Csum(int num) { if (num < 10) //小于10的数直接返回 return num; int shi = 0; //记录个位数相加 while (num > 0) { if (num >= 10) { shi += num % 10; num = num / 10; } else if (num < 10) { shi += num; num = num / 10; } if (shi >= 10) shi = shi % 10 + shi / 10; //超过10的个位数重新变化 } return shi; }
方法二 弃九验算法
同样在 60-70ms
public class Solution { public int AddDigits(int num) { if(num==0) return 0; if(num%9==0) return 9; return num%9; } }
到此这篇关于C#算法之各位相加的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
C#实现拼手气红包算法
本文实例为大家分享了C#实现拼手气红包算法的具体代码,供大家参考,具体内容如下 一.方案1:即开即中,考虑机会均等,减少金额差较大的几率 可以每次点击时候,随机产生 static double[] GetRandomMoney(double money, int n) { double[] array = new double[n]; RedPackage red = new RedPackage() { money = money, count = n }; for (int i = 0; i
-
C#排序算法之快速排序解析
本文实例为大家分享了C#实现快速排序的具体代码,供大家参考,具体内容如下 代码: /// <summary> /// 排序 /// </summary> /// <param name="array">要排序的数组</param> /// <param name="low">下标开始位置,向右查找</param> /// <param name="high">下标
-
开源一个c# 新的雪花算法
介绍 用一种全新的雪花漂移算法(以下简称本算法),让ID更短.生成速度更快. 核心在于缩短ID长度的同时,还能保持极高并发处理量(50W/0.1s),且具有很强配置能力. 需求来源 1.作为架构设计的你,想要解决数据库主键唯一的问题,特别是在分布式系统多数据库的时候. 2.你希望这个主键是用最少的存储空间,索引速度更快,Select.Insert 和 Update 更迅速. 3.你要考虑在分库分表(合库合表)的时候,主键值可直接使用,并能反映业务时序. 4.如果这样的主键值太长,超过前端 JS
-
C#算法之无重复字符的最长子串
题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3. 示例 2: 输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1. 示例 3: 输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke"
-
C# 递归算法详解
目录 1)1.1.2.3.5.8.......用递归算法求第30位数的值? 2)编写计算斐波那契(Fibonacci)数列的第n项函数fib(n)斐波那契数列为:0.1.1.2.3.--, 3)求1+2+3+4+5+....+n的值 4)有两个整数型数组,从小到大排列,编写一个算法将其合并到一个数组中,并从小到大排列 总结 1)1.1.2.3.5.8.......用递归算法求第30位数的值? 首先我们能够发现从第3位数起后一位数等于前两位数值之和,即:x=(x-1)+(x-2),x>2; 这里须
-
C#算法之两数之和
题目 给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1] 提示:不能自身相加. 测试用例 [2,7,11,15] 9 预期结果 [0,1] 格式模板 public class S
-
C#实现银行家算法
本文实例为大家分享了C#实现银行家算法的具体代码,供大家参考,具体内容如下 1.死锁 死锁,顾名思义,是一种锁住不可自行解开的死局. 在操作系统中,"死锁"用于描述资源分配时,进程互相抢占资源,又因为需求的资源被别的进程抢占,只好互相等待,以至于等待循环中的所有进程均无法正常运行的情况. 死锁形成需要四个条件,这四个条件缺少一个,就不会形成死锁. 死锁的四个条件 1)互斥条件 即对于某资源在一段时间内仅允许一个进程占有使用. 2)占有且等待条件/请求和保持条件 在进程已经占有一个或多个
-
C#算法之冒泡排序、插入排序、选择排序
冒泡排序法 是数组等线性排列的数字从大到小或从小到大排序. 以从小到大排序为例. 数据 11, 35, 39, 30, 7, 36, 22, 13, 1, 38, 26, 18, 12, 5, 45, 32, 6, 21, 42, 23 使用 数组 int [] array 存储数字. 过程 (数组从小到大排序) 思路循环都把最大的数放在最后一位,无序数字个数减1. i 为当前任务位置,n 剩下的无序数字个数 从第 0位开始,比较前后两位数字大大小,当array[i] > array[i+1]时
-
C#算法之各位相加
各位相加 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数. 示例: 输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2. 由于 2 是一位数,所以返回 2. 进阶: 你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗? 代码模板 public class Solution { public int AddDigits(int num) { } } 测试数据 输入 1 输出 1 输入 10 输出 1 输入 38 输
-
java中超过long范围的超大整数相加算法详解(面试高频)
java里有数字long来表示大的整数,如果两个数字的范围超过了long,要做加法算法怎么做呢? 这个问题在面试中经常碰到,如果之前没有经历的,可能一时有点想不起来怎么做. 下面我们来分析一下,两个数字超过了long的范围,那显然不能用java中的基本数字类型来计算了. 我们可以想小时候刚学习加法的竖式运算,个位对个位,十位对十位,百位对百位...以此类推.当个位满十向十位进1,十位满十向百位进1...以此类推,就这样完成了运算. 表示出来如下: 1 4 5 + 2 6 9 --------
-
go语言的四数相加等于指定数算法
给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 首先将四个数组分割为两两数组,前两个数组值相加,后两个数组相加,入股前两个数组相加和与后两个数组相加和正好为相反数,四个元素之和为0. 首先: 将两数组的元素进行遍历相加,相加之和为map的索引.所指向的元素,就是出现的次数. func foursumcount(A []int, B []int, C []int, D []i
-
C++实现算法两个数字相加详解
Add Two Numbers 两个数字相加 You have two numbers represented by a linked list, where each node contains a single digit. The digits are stored in reverse order, such that the 1's digit is at the head of the list. Write a function that adds the two numbers
-
QT实现将两个时间相加的算法[hh: mm + hh: mm]的示例代码
目录 [1]简介 [2]标志位 [3]系统时间+设定的时间[源码附上] [4]系统时间+清洗时间[附上源码] [5]总结 [1]简介 本次写作是在实际项目中需要,进行的时间算法,本人通过QT时间戳的方式,是无法实现两个时间相加的.但是又必须添加这个项目功能,于是自己写了一份时间算法,主要是时分的形式,例如: 12:59 + 9:59这种形式.另外如果各位博主有更好的算法或者函数库提供,请在下方附上 link [2]标志位 首先介绍实现的这两个函数:void setTreatmentEndtime
-
进制转换算法原理(二进制 八进制 十进制 十六进制)
1.二进制数.八进制数.十六进制数转十进制数 有一个公式:二进制数.八进制数.十六进制数的各位数字分别乖以各自的基数的(N-1)次方,其和相加之和便是相应的十进制数.个位,N=1;十位,N=2...举例: 110B=1*2的2次方+1*2的1次方+0*2的0次方=0+4+2+0=6D 110Q=1*8的2次方+1*8的1次方+0*8的0次方=64+8+0=72D 110H=1*16的2次方+1*16的1次方+0*16的0次方=256+16+0=272D 2.十进制数转二进制数.八进制数.十六进制
-
将15位身份证补全为18位身份证的算法示例详解
前言 最近在参与一个银行项目-某银行安防系统-反洗钱需求的开发,银行项目的离不开身份证号码,身份证号码作为我国公民的唯一标识,有这非同寻常的意义,由于业务的要求15位的身份证号码无法命中,所以需要补全为18位,一开始自己想着加个年份的前两位,后面再加个X不就行了嘛,后来代码写不下去了,上网查了资料,才知道自己想的是多么天真,还是比较复杂的,折腾了一下午终于有了眉目. 一.15位身份证和18位身份证号码结构介绍 要进行身份证号码的验证,首先需要了解我国身份证号码的编码规则.我国身份证号码多由若干位
-
kNN算法python实现和简单数字识别的方法
本文实例讲述了kNN算法python实现和简单数字识别的方法.分享给大家供大家参考.具体如下: kNN算法算法优缺点: 优点:精度高.对异常值不敏感.无输入数据假定 缺点:时间复杂度和空间复杂度都很高 适用数据范围:数值型和标称型 算法的思路: KNN算法(全称K最近邻算法),算法的思想很简单,简单的说就是物以类聚,也就是说我们从一堆已知的训练集中找出k个与目标最靠近的,然后看他们中最多的分类是哪个,就以这个为依据分类. 函数解析: 库函数: tile() 如tile(A,n)就是将A重复n次
-
JavaScript中九种常用排序算法
笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用JavaScript实现. 一.插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 2)算法描述和实现 一般来说,插入排序都采
-
python实现list元素按关键字相加减的方法示例
本文实例讲述了python实现list元素按关键字相加减的方法.分享给大家供大家参考,具体如下: Python list中的元素按关键字相加或相减: # coding=utf-8 # 两个list按关键字相加或相减 def ListAdd(list1, list2, bAdd = True): if bAdd == False: list2 = [(k, -v) for (k, v) in list2] d = {} list0 = list1 + list2 for (k, v) in lis
随机推荐
- ASP.NET如何获取两个日期之间的天数
- mysql5.7.19 winx64安装配置方法图文教程(win10)
- VBS教程:VBScript 语句-ReDim 语句
- java正则表达式彻底研究
- iOS中的UISearchBar搜索框组件基础使用指南
- JS实现的网页倒计时数字时钟效果
- ThinkPHP之N方法实例详解
- CentOS 7下部署php7.1和开启MySQL扩展的方法教程
- Python实现简单截取中文字符串的方法
- MySQL自增列插入0值的解决方案
- 用Javascript 和 CSS 实现脚注(Footnote)效果
- Android RecyclerView艺术般的控件使用完全解析
- Javascript 调用 ActionScript 的简单方法
- 告别Google补充材料的五个注意事项
- dialog dismiss时键盘不消失的问题浅析及解决办法
- C# 打开电子邮件软件的具体方法
- Android实现实时通信示例
- python复制文件到指定目录的实例
- 搞清楚 Python traceback的具体使用方法
- php探针不显示内存解决方法