1隆豹,題目:給定一個(gè)有符號(hào)的整數(shù)酷麦,將此有符號(hào)整數(shù)反轉(zhuǎn)輸出
-(NSInteger)reverseInt:(NSInteger)ParInt
{
NSInteger result = 0;
while (ParInt != 0)
{
NSInteger temp = ParInt % 10; //求模運(yùn)算
ParInt /= 10; //去除最后一位
result =result * 10 + temp;
}
return result;
}
2,判斷一個(gè)整數(shù)是否是回文數(shù)⌒拷觯回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)
-(BOOL)isPalindrome:(NSInteger)paraInt
{
//小于10不是回文數(shù)
if (paraInt <= 10)
{
return NO;
}
//我們拿反轉(zhuǎn)數(shù)求模剩余的數(shù)字進(jìn)行比較,反轉(zhuǎn)一半的數(shù)就可以崇决,如果是奇數(shù)的話缭裆,我們只需要把他去除掉即可
NSInteger temp = 0;
while (temp * 10 < paraInt)
{
temp = paraInt % 10 + temp * 10;
paraInt /= 10;
}
return temp == paraInt || temp/10 == paraInt;
}
3,冒泡排序優(yōu)化( j < sortArray.count - 1 - i 減少循環(huán)次數(shù) bFlag 不需要交換的話可以不用循環(huán)渤昌,加入判空操作)
//我們應(yīng)該在函數(shù)的開(kāi)始去判斷數(shù)組的狀態(tài)已經(jīng)長(zhǎng)度
-(NSArray*)bubbleSort:(NSArray*)array
{
//判斷數(shù)組狀態(tài)
if (!array || array.count == 1)
{
return array;
}
NSMutableArray *sortArray = [NSMutableArray arrayWithArray:array];
NSInteger execCount = 0;//交換次數(shù)
BOOL bFlag = YES;//是否已經(jīng)是排序完成
NSInteger forCount = 0;//for循環(huán)總共執(zhí)行了多少次
for (NSInteger i = 0; i < sortArray.count && bFlag; i++)
{
bFlag = NO;
forCount++;
for (NSInteger j = 0; j < sortArray.count - 1 - i; j++)
{
forCount++;
if ([sortArray[j] integerValue] > [sortArray[j + 1] integerValue])
{
[sortArray exchangeObjectAtIndex:j withObjectAtIndex:j + 1];
execCount++;
bFlag = YES;
[self displayArray:sortArray];
}
}
}
NSLog(@"交換共執(zhí)行了%ld次", execCount);
NSLog(@"for循環(huán)共執(zhí)行了%ld次", forCount);
return sortArray;
}
4虽抄,選擇排序
//選擇排序
//每次把最大的選出來(lái) 放到前面,然后依次類(lèi)推
-(NSArray*)selectSort:(NSArray*)array
{
if (!array || array.count == 1)
{
return array;
}
NSMutableArray *sortResult = [NSMutableArray arrayWithArray:array];
NSInteger flag;
NSInteger execCount = 0;//交換次數(shù)
NSInteger forCount = 0;//for循環(huán)總共執(zhí)行了多少次
for (NSInteger i = 0; i < sortResult.count; i++)
{
flag = i;
forCount++;
for (NSInteger j = i; j < sortResult.count - 1; j++)
{
if (sortResult[j + 1] > sortResult[flag])
{
flag = j + 1;
}
forCount++;
}
if (i != flag)
{
[sortResult exchangeObjectAtIndex:i withObjectAtIndex:flag];
execCount++;
[self displayArray:sortResult];
}
}
NSLog(@"交換共執(zhí)行了%ld次", execCount);
NSLog(@"for循環(huán)共執(zhí)行了%ld次", forCount);
return sortResult;
}
-(void)displayArray:(NSArray*)array
{
NSMutableString *displayString = [NSMutableString stringWithString:@"["];
for (NSInteger i = 0; i < array.count; i++)
{
i == array.count - 1 ? [displayString appendString:[NSString stringWithFormat:@"%ld", (long)[array[i] integerValue]]] :[displayString appendString:[NSString stringWithFormat:@"%ld%@", (long)[array[i] integerValue], @","]];
}
[displayString appendString:@"]"];
NSLog(@"%@", displayString);
}
5独柑,羅馬數(shù)字轉(zhuǎn)整數(shù)
-(NSInteger)romanToInt:(NSString*)roman
{
if([roman integerValue] > 3999 || [roman integerValue] < 1)
{
return 0;
}
NSInteger result = 0;
NSInteger romanLen = roman.length;
NSInteger start = 0;
if (romanLen == 1)
{
result = [self singleRoman:roman];
}
else
{
while (start < romanLen)
{
NSString *temp = [roman substringWithRange:NSMakeRange(start, 1)];
if ([temp isEqualToString:@"I"] || [temp isEqualToString:@"X"] || [temp isEqualToString:@"C"])
{
if (romanLen - start >= 2)
{
NSString *str = [roman substringWithRange:NSMakeRange(start, 2)];
if ([str isEqualToString:@"IV"] || [str isEqualToString:@"IX"] || [str isEqualToString:@"XL"] || [str isEqualToString:@"XC"] || [str isEqualToString:@"CD"] || [str isEqualToString:@"CM"] )
{
result += [self singleRoman:str];
start += 2;
}
else
{
result += [self singleRoman:temp];
start += 1;
}
}
else
{
result += [self singleRoman:temp];
start += 1;
}
}
else
{
result += [self singleRoman:temp];
start += 1;
}
}
}
NSLog(@"返回的數(shù)字為%ld", result);
return result;
}
-(NSInteger)singleRoman:(NSString*)roman
{
if ([roman isEqualToString:@"I"])
{
return 1;
}
else if ([roman isEqualToString:@"V"])
{
return 5;
}
else if ([roman isEqualToString:@"X"])
{
return 10;
}
else if ([roman isEqualToString:@"L"])
{
return 50;
}
else if ([roman isEqualToString:@"C"])
{
return 100;
}
else if ([roman isEqualToString:@"D"])
{
return 500;
}
else if ([roman isEqualToString:@"M"])
{
return 1000;
}
else if ([roman isEqualToString:@"IV"])
{
return 4;
}
else if ([roman isEqualToString:@"IX"])
{
return 9;
}
else if ([roman isEqualToString:@"XL"])
{
return 40;
}
else if ([roman isEqualToString:@"XC"])
{
return 90;
}
else if ([roman isEqualToString:@"CD"])
{
return 400;
}
else if ([roman isEqualToString:@"CM"])
{
return 900;
}
return 0;
}
6极颓,編寫(xiě)一個(gè)函數(shù)來(lái)查找字符串?dāng)?shù)組中的最長(zhǎng)公共前綴
-(NSString*)longestCommonPrefix:(NSArray*)stringArray
{
if (stringArray.count == 0)
{
return @"";
}
else if (stringArray.count == 1)
{
return stringArray[0];
}
NSString *minString = stringArray[0];
for (NSInteger i = 1; i < stringArray.count; i++)
{
NSString *temp = stringArray[i];
if (temp.length < minString.length)
{
minString = temp;
}
}
NSInteger minLen = minString.length;
minString = stringArray[0];
NSString *temp;
NSInteger common = 1;//用來(lái)記錄是否所有的字符串都用相同的前綴
while (minLen > 0)
{
common = 1;//重置
minString = [minString substringWithRange:NSMakeRange(0, minLen)];
for (NSInteger i = 1; i < stringArray.count; i++)
{
temp = [stringArray[i] substringWithRange:NSMakeRange(0, minLen)];
if (![minString isEqualToString:temp])
{
break;
}
else
{
common++;
}
}
if (common == stringArray.count)//判斷累計(jì)的次數(shù)是否和數(shù)組長(zhǎng)度相同,如果相同就是為公共前綴
{
return minString;
}
minLen--;
}
return @"";
}
7群嗤,大數(shù)相加
+ (NSString*)additionOfString:(NSString*)strOne AndString:(NSString*)strTwo {
NSMutableString *One = [NSMutableString stringWithFormat:@"%@",strOne];
NSMutableString *Two = [NSMutableString stringWithFormat:@"%@",strTwo];
NSInteger longerLength = 0;
NSInteger t = 0;
int jin = 0;
NSMutableString *strJ = [NSMutableString new];
NSMutableString *sum = [NSMutableString new];
// 補(bǔ)位:位數(shù)少的用0補(bǔ)齊菠隆,使兩個(gè)字符串位數(shù)相等
if(One.length > Two.length) {
t = One.length - Two.length;
for(NSInteger i =0;i < t;i++) {
[Two insertString:[NSString stringWithFormat:@"0"] atIndex:0];
}
}else if(One.length < Two.length) {
NSInteger t = Two.length - One.length;
for(NSInteger i =0;i < t;i++) {
[One insertString:[NSString stringWithFormat:@"0"] atIndex:0];
}
} else if (One.length== Two.length){
} else {
return @"您的輸入有誤!";
}
longerLength = One.length;
for(NSInteger i = longerLength - 1; i >= 0;i--) {
unichar onenum = [One characterAtIndex:i];
unichar twonum = [Two characterAtIndex:i];
int onum = [[NSString stringWithFormat:@"%c",onenum] intValue];
int tnum = [[NSString stringWithFormat:@"%c",twonum] intValue];
int c = onum + tnum + jin;
int z = c%10;
jin = c/10;
[strJ appendFormat:@"%d",z];
if(jin!=0&&i ==0) {
[strJ appendFormat:@"%d",jin];
}
}
// 上面得到的是一個(gè)倒序字符串,需要變成正序
for(NSInteger i = strJ.length-1; i>= 0;i--) {
unichar k = [strJ characterAtIndex:i];
[sum appendFormat:@"%c",k];
}
return sum;
}
8骇径,大數(shù)相乘
+ (NSString*)mutiplyOfString:(NSString*)strOne AndString:(NSString*)strTwo {
NSMutableString *One = [NSMutableString stringWithFormat:@"%@",strOne];
NSMutableString *Two = [NSMutableString stringWithFormat:@"%@",strTwo];
int jin = 0;
NSMutableString *strJ = [NSMutableString new];
NSMutableString *strT = [NSMutableString new]; // strJ的正序
NSString *sum = [NSString new];
NSMutableArray * strJArr = [NSMutableArray array];
for(NSInteger i = One.length-1; i >=0; i--) {
strJ = [NSMutableString new];
strT = [NSMutableString new];
jin = 0;
unichar onenum = [One characterAtIndex:i];
for(NSInteger j = Two.length-1; j >=0; j--){
unichar twonum = [Two characterAtIndex:j];
int onum = [[NSString stringWithFormat:@"%c",onenum] intValue];
int tnum = [[NSString stringWithFormat:@"%c",twonum] intValue];
int c = onum * tnum +jin;
int z = c%10;
jin = c/10;
if(j != 0) {
[strJ appendFormat:@"%d",z];
}else{
//是否最后一位
[strJ appendFormat:@"%d",c%10];
if(c/10 != 0) {
[strJ appendFormat:@"%d",c/10];
}
}
}
// 正序操作
for(NSInteger a = strJ.length-1; a >= 0;a--) {
unichar c = [strJ characterAtIndex:a];
[strT appendFormat:@"%c",c];
}
// 將strT放入數(shù)組躯肌,稍后加0后進(jìn)行大數(shù)相加;
[strJArr addObject:strT];
}
if(strJArr.count==0){
return @"您的輸入有誤!";
}
for(NSInteger k =0; k < strJArr.count; k++){
NSMutableString*strP = strJArr[k];
// 高位數(shù)補(bǔ)0
for(NSInteger i = k;i >0;i--) {
[strP insertString:[NSString stringWithFormat:@"0"] atIndex:strP.length];
}
// 大數(shù)相加
sum = [BigNumberAdd additionOfString:sum AndString:strP];
}
return sum;
}